- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 django 基于类的 View 。假设有一个这样的ListView:
@method_decorator(ensure_csrf_cookie, name='dispatch')
class SomeView(ListView):
...
如果另一个基于类的 View 继承了SomeView,它是否也继承了“ensure_csrf_cookie”?或者它必须在每个子类上显式定义?
最佳答案
“@decorator”语法只是转换此语法的语法糖:
@decorator
class SomeClass(parent):
pass
进入此:
class SomeClass(parent):
pass
SomeClass = decorator(SomeClass)
IOW,无论如何decorator
do 是在创建类之后完成的,因此作为一般规则,您不能指望它会被 SomeClass
的子类继承。 -“装饰器做了什么”实际上是否会被继承(或不继承)实际上取决于“装饰器做了什么”和子类定义。
wrt/您的具体用例:method_decorator
用于装饰类的给定方法(示例中的 dispatch
方法)。如果您的子类没有重写此方法,那么它将在父类中查找。在这种情况下,您确实最终会使用装饰方法。但是,如果您在子类中重写装饰方法,则将使用新方法而不是父类的方法,因此它不会被自动装饰,您必须再次应用装饰器。
FWIW,自己测试很容易:
>>> def decorator(func):
... def wrapper(*args, **kw):
... print("before %s(%s, %s)" % (func, args, kw)
... )
... return func(*args, **kw)
... return wrapper
...
>>> from django.utils.decorators import method_decorator
>>> @method_decorator(decorator, name='foo')
... class Bar(object):
... def foo(self):
... print("%s.foo()" % self)
...
>>> b = Bar()
>>> b.foo()
before <function bound_func at 0x7fefab044050>((), {})
<Bar object at 0x7fefab09af10>.foo()
>>> class Quux(Bar): pass
...
>>> q = Quux()
>>> q.foo()
before <function bound_func at 0x7fefab044050>((), {})
<Quux object at 0x7fefab041110>.foo()
>>> class Baaz(Bar):
... def foo(self):
... print("this is Baaz.foo")
...
>>> bz = Baaz()
>>> bz.foo()
this is Baaz.foo
>>>
关于django - 基于 django 类的 View 是否继承 method_decorators?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55060641/
我一直在遵循以下关于如何创建聊天机器人的指南 ( https://abhaykashyap.com/blog/post/tutorial-how-build-facebook-messenger-bo
我正在使用基于类的 View ,我想确保每个 View 都可以由登录用户和一种类型的用户访问(有两组用户 - 每组都有不同的权限) 。 我正在根据具有权限的文档来实现此操作(我正在使用 Django
我正在使用 django 基于类的 View 。假设有一个这样的ListView: @method_decorator(ensure_csrf_cookie, name='dispatch') cla
我整天都在研究这个。 我正在尝试为类 View 编写自定义权限,以检查用户是否在某个权限组中。 def rights_needed(reguest): if request.user.groups
我是django的新手,我很困惑Django中的@login_required和@method_decorator(login_required)有什么区别,我们应该使用哪个。提前致谢。 最佳答案 在
from django.contrib.auth.decorators import permission_required from django.utils.decorators imp
我是一名优秀的程序员,十分优秀!