浏览代码

Normalized decorator style for functools.wraps.

Aymeric Augustin 2 年之前
父节点
当前提交
8cf4de206c

+ 6 - 3
django/views/decorators/clickjacking.py

@@ -12,13 +12,14 @@ def xframe_options_deny(view_func):
         ...
     """
 
+    @wraps(view_func)
     def wrapper_view(*args, **kwargs):
         resp = view_func(*args, **kwargs)
         if resp.get("X-Frame-Options") is None:
             resp["X-Frame-Options"] = "DENY"
         return resp
 
-    return wraps(view_func)(wrapper_view)
+    return wrapper_view
 
 
 def xframe_options_sameorigin(view_func):
@@ -32,13 +33,14 @@ def xframe_options_sameorigin(view_func):
         ...
     """
 
+    @wraps(view_func)
     def wrapper_view(*args, **kwargs):
         resp = view_func(*args, **kwargs)
         if resp.get("X-Frame-Options") is None:
             resp["X-Frame-Options"] = "SAMEORIGIN"
         return resp
 
-    return wraps(view_func)(wrapper_view)
+    return wrapper_view
 
 
 def xframe_options_exempt(view_func):
@@ -51,9 +53,10 @@ def xframe_options_exempt(view_func):
         ...
     """
 
+    @wraps(view_func)
     def wrapper_view(*args, **kwargs):
         resp = view_func(*args, **kwargs)
         resp.xframe_options_exempt = True
         return resp
 
-    return wraps(view_func)(wrapper_view)
+    return wrapper_view

+ 2 - 1
django/views/decorators/common.py

@@ -8,8 +8,9 @@ def no_append_slash(view_func):
     """
     # view_func.should_append_slash = False would also work, but decorators are
     # nicer if they don't have side effects, so return a new function.
+    @wraps(view_func)
     def wrapper_view(*args, **kwargs):
         return view_func(*args, **kwargs)
 
     wrapper_view.should_append_slash = False
-    return wraps(view_func)(wrapper_view)
+    return wrapper_view

+ 2 - 1
django/views/decorators/csrf.py

@@ -50,8 +50,9 @@ def csrf_exempt(view_func):
     """Mark a view function as being exempt from the CSRF view protection."""
     # view_func.csrf_exempt = True would also work, but decorators are nicer
     # if they don't have side effects, so return a new function.
+    @wraps(view_func)
     def wrapper_view(*args, **kwargs):
         return view_func(*args, **kwargs)
 
     wrapper_view.csrf_exempt = True
-    return wraps(view_func)(wrapper_view)
+    return wrapper_view

+ 2 - 1
tests/decorators/tests.py

@@ -159,10 +159,11 @@ class DecoratorsTest(TestCase):
 # For testing method_decorator, a decorator that assumes a single argument.
 # We will get type arguments if there is a mismatch in the number of arguments.
 def simple_dec(func):
+    @wraps(func)
     def wrapper(arg):
         return func("test:" + arg)
 
-    return wraps(func)(wrapper)
+    return wrapper
 
 
 simple_dec_m = method_decorator(simple_dec)