- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试了解this blog post上发布的mixins的代码。
这些mixins从mixins中的login_required
调用django.contrib.auth.decorators
装饰器,但它们通过method_decorator
中的django.utils.decorators
装饰。
在下面的示例代码中,我不明白为什么需要装饰login_required
装饰器。
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required
class LoginRequiredMixin(object):
"""
View mixin which verifies that the user has authenticated.
NOTE:
This should be the left-most mixin of a view.
"""
# Why do I need to decorate login_required here
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(LoginRequiredMixin, self).dispatch(*args, **kwargs)
method_decorator
装饰器表示它用于“将函数装饰器转换为方法装饰器”,但是在测试代码中,即使没有method_decorator,我也可以使用我的装饰器。
def run_eight_times(myfunc):
def inner_func(*args, **kwargs):
for i in range(8):
myfunc(*args, **kwargs)
return inner_func
method_decorator
装饰的装饰器相同的结果
from django.utils.decorators import method_decorator
class Myclass(object):
def __init__(self,name,favorite_dish):
self.name = name
self.favorite_dish = favorite_dish
# This next line is not required
#@method_decorator(run_eight_times)
@run_eight_times
def undecorated_function(self):
print "%s likes spam in his favorite dish %s" % (self.name,self.favorite_dish)
最佳答案
Django的method_decorator设置为将self
参数正确传递给装饰函数。在您上面用run_eight_times
装饰器编写的测试用例中未显示出来的原因是,inner_func
中的run_eight_times
盲目地通过*args
和**kwargs
将所有参数传递给myfunc。通常,情况并非如此。
要在您的示例中看到它,请尝试以下操作:
from django.utils.decorators import method_decorator
def run_eight_times(myfunc):
def inner_func(what_he_likes, **kwargs):
# override...
what_he_likes = 'pizza'
for i in range(8):
myfunc(what_he_likes, **kwargs)
return inner_func
class MyClass(object):
def __init__(self, name, favorite_dish):
self.name = name
self.favorite_dish = favorite_dish
# This next line required!
@method_decorator(run_eight_times)
#@run_eight_times
def undecorated_function(self, what_he_likes):
print "%s likes %s in his favorite dish %s" % (
self.name, what_he_likes, self.favorite_dish
)
def main():
inst = MyClass('bob', 'burrito')
inst.undecorated_function('hammy spam')
if __name__ == '__main__':
main()
(request, *args, **kwargs)
的函数。对于基于类的 View ,应为
(self, request, *args, **kwargs)
。这就是
method_decorator
所做的-将第一个签名转换为第二个签名。
关于django - 为什么需要用@method_decorator装饰login_required装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9560840/
我是django的新手,我很困惑Django中的@login_required和@method_decorator(login_required)有什么区别,我们应该使用哪个。提前致谢。 最佳答案 在
我正在为我的应用程序使用flask-login插件,该插件已经得到了很大程度的开发。 我想将所有URL端点标记为“ @login_required”。 Is there any way I can d
我正在使用 Django 消息框架向用户显示消息以及 @login_required装饰师对我的看法之一。因此,如果用户试图在未登录的情况下访问某个 View ,他们将被踢到登录页面。我将如何向登录页
我在 Django 中使用基于类的 View 。 @login_required 装饰器没有重定向到登录页面。它仍然显示个人资料页面。 class ProfileView(TemplateView):
@login_required 装饰器似乎对我没有任何作用。如果用户未登录并调用注册,我希望它重定向到登录页面。我错过了什么吗?我什至尝试设置 @login_required(login_url='/
我在 Django 中使用基于类的 View 。 @login_required 装饰器没有重定向到登录页面。它仍然显示个人资料页面。 class ProfileView(TemplateView):
@login_required 装饰器似乎对我没有任何作用。如果用户未登录并调用注册,我希望它重定向到登录页面。我错过了什么吗?我什至尝试设置 @login_required(login_url='/
你好,我有以下看法: class BookList(RequireLoginMixin, generic.ListView): model = Book template_name =
我正在使用 i18n_patterns 来国际化我的应用程序并且它正在运行,除非我单击需要登录的链接(受 @login_required 装饰器保护的 View ),我是被重定向到默认语言的登录表单,
根据 https://stackoverflow.com/a/8715790/210481 中的评论之一,我同意,如果一个依赖于另一个,我们应该避免使用多个装饰器。 因此,在示例中,如果我们有一个用于
我正在尝试在具有 login_required 的 View 上测试发布请求。 如果我在 shell django 中运行它: Client().post('/recipes/', {'name' :
我正在为我的应用程序中的某些路由使用 Flask-login 的 @login_required 装饰器。在未登录的情况下导航到这些路线时,我会被重定向到登录页面。到目前为止一切顺利。 重定向的网址如
我正在运行 django 1.1rc。使用 Django 的内置开发服务器,我的所有代码都能正常工作;但是,当我使用 Apache 的 mod_python 将其投入生产时,我在所有 View 中都收
我正在尝试限制 View ,除非完成登录。正在关注 tuts+plus django unchained 教程 但是 login_required 装饰器不知何故没有完成这项工作。我做错了什么? vi
我正在将flask-login 与postgreSQL 结合使用。每当我在任何 def 之前有一个装饰器 @login_required 时,它不会重定向到该特定的 def。这是我的代码: init.
我想将 login_required 与基于函数的 View 一起使用。我浏览了 Django's official docs of django.contrib.auth.decorators.lo
我正在尝试使用 SSL 在本地测试我的 Django 应用程序。我有一个带有 @login_required 装饰器的 View 。因此,当我点击 /locker 时,我会被重定向到 /locker/
默认情况下,当使用 @login_required 装饰器时,Django 会在将未经身份验证的用户重定向到登录页面时执行 302(临时)重定向。我与一家 SEO 公司合作(我自己对这个话题一无所知)
我在我的应用程序中使用 Flask-HTTPAuth 来处理身份验证。我有很多观点,我不想给每一个都加上login_required。如何让默认要求登录? from flask.ext.httpaut
我已经创建了一个处理身份验证的蓝图。此蓝图使用 Flask-Login。并具有以下内容以及未显示的更多代码。 在蓝图中我有以下内容: from flask.ext.login import Login
我是一名优秀的程序员,十分优秀!