码迷,mamicode.com
首页 > 其他好文 > 详细

在DJANGO的类视图中实现登陆要求和权限保护

时间:2015-09-02 22:04:57      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

以前接触的是基于函数的保护,网上材料比较多。

但基于类视图的很少。

补上!

Decorating class-based views 装饰类视图

对于类视图的扩展并不局限于使用mixin。你也可以使用装饰器。

Decorating in URLconf URLconf中的装饰器

最简单的装饰类视图的方式是装饰 as_view() 方法返回的结果。最容易装饰的地方是你配置你的视图的地方URLconf中:

from django.contrib.auth.decorators import login_required, permission_required
from django.views.generic import TemplateView

from .views import VoteView

urlpatterns = patterns(‘‘,
    (r‘^about/‘, login_required(TemplateView.as_view(template_name="secret.html"))),
    (r‘^vote/‘, permission_required(‘polls.can_vote‘)(VoteView.as_view())),
)

这种方法适用于装饰每个实例的基础。如果你想要视图的每个实例都被装饰, 你需要采用别的方法。

Decorating the class 装饰类

要装饰类视图的每一个实例,你需要装饰类自身的定义。要实现这个目的,你要 应用这个装饰器到类的 dispatch() 方法上。

类方法和独立的函数并不完全一样,因此你不能仅仅应用函数的装饰器 – 你需要先把它转换为一个类方法的装饰器。method_decorator 这个装饰器 能把一个函数装饰器转变为类方法装饰器,因此它就可以被用在实例方法上了。 比如:

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic import TemplateView

class ProtectedView(TemplateView):
    template_name = ‘secret.html‘

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(ProtectedView, self).dispatch(*args, **kwargs)

在这个例子中, ProtectedView 的每个实例都将拥有登录保护的功能。

Note

method_decorator 方法传递 *args 和 **kwargs 给这个类上的 装饰器。如果你的方法不接受兼容参数集合,它会抛出 TypeError 异常。

在DJANGO的类视图中实现登陆要求和权限保护

标签:

原文地址:http://www.cnblogs.com/aguncn/p/4779506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!