回答編集履歴
2
typo
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
一晩寝ると、もう少しマシなのを思いつきました。
|
2
2
|
django/contrib/auth/decorators.py にある `login_required`関数の実装は下記のようになっていて、
|
3
|
-
```
|
3
|
+
```python
|
4
4
|
def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None):
|
5
5
|
"""
|
6
6
|
Decorator for views that checks that the user is logged in, redirecting
|
@@ -16,13 +16,13 @@
|
|
16
16
|
return actual_decorator
|
17
17
|
```
|
18
18
|
デコレータでラップした関数を返しているように見えるので、テストで使っている
|
19
|
-
```
|
19
|
+
```python
|
20
20
|
self.assertEqual(view.func, ajax_respond)
|
21
21
|
```
|
22
22
|
の`view.func`は、やはり元の関数ではなくラップした別の関数として見えているようです。
|
23
23
|
|
24
24
|
`pprint(vars(view.func))`すると__wrapped__という属性が見つかったので、これを使って以下のようにしてみました。
|
25
|
-
```
|
25
|
+
```python
|
26
26
|
self.assertEqual(view.func.__wrapped__, ajax_respond)
|
27
27
|
```
|
28
28
|
これで一応は意図通りに動き、名前で判断するよりもベターかなと思うのですが、アンダーバー2つで始まる名前なので、外から覗くのはちょっと行儀が悪いですね。
|
1
test
CHANGED
@@ -15,14 +15,13 @@
|
|
15
15
|
return actual_decorator(function)
|
16
16
|
return actual_decorator
|
17
17
|
```
|
18
|
-
デコレータでラップした関数を返しているように見えるのでテストで使っている
|
18
|
+
デコレータでラップした関数を返しているように見えるので、テストで使っている
|
19
19
|
```
|
20
20
|
self.assertEqual(view.func, ajax_respond)
|
21
21
|
```
|
22
22
|
の`view.func`は、やはり元の関数ではなくラップした別の関数として見えているようです。
|
23
23
|
|
24
|
-
`pprint(vars(view.func))`すると__wrapped__という属性が見つかったので、これを使って
|
24
|
+
`pprint(vars(view.func))`すると__wrapped__という属性が見つかったので、これを使って以下のようにしてみました。
|
25
|
-
以下のようにしてみました。
|
26
25
|
```
|
27
26
|
self.assertEqual(view.func.__wrapped__, ajax_respond)
|
28
27
|
```
|