回答編集履歴

2

typo

2022/01/29 00:59

投稿

yaxavr
yaxavr

スコア39

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

2022/01/29 00:51

投稿

yaxavr
yaxavr

スコア39

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
  ```