Django内置auth模块中login_required装饰器用于类视图的优雅方式

Posted endurance9

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django内置auth模块中login_required装饰器用于类视图的优雅方式相关的知识,希望对你有一定的参考价值。

使用多继承 以及类似java中的静态代理模式

原理:OrderView.as_view()根据广度优先,调用的是LoginRequiredMixin中的as_view(cls, *args, **kwargs)

这时的cls=OrderView

接下来super(LoginRequiredMixin, cls).as_view(*args, **kwargs) 会调用到View类中的as_view()并返回一个视图函数

然后,用将这个视图函数作为参数传给Login_required()并返回经过装饰的结果

class A(object):
 @classmethod
 def do(cls):
     print(‘我是你的眼‘)


class B(object):
 @classmethod
 def do(cls):
     print(cls)
     super(B, cls).do()
     print("--" * 12)


class C(B, A):
 pass


if __name__ == ‘__main__‘:
 C.do()
 
<class ‘__main__.C‘>
我是你的眼
------------------------    
from django.contrib.auth.decorators import login_required


class LoginRequiredMixin(object):
    @classmethod
    def as_view(cls, *args, **kwargs):
        view = super(LoginRequiredMixin, cls).as_view(*args, **kwargs)
        return login_required(view)
        
        
        
# /user/order
class OrderView(LoginRequiredMixin, View):
    """ 用户中心 订单 """

    def get(self, request):
        context = {‘page‘: ‘order‘}
        return render(request, ‘user/user_center_order.html‘, context)        
        
        
urlpatterns = [
    url(r‘^order/$‘, views.OrderView.as_view(), name=‘order‘),
]        
                                      

以上是关于Django内置auth模块中login_required装饰器用于类视图的优雅方式的主要内容,如果未能解决你的问题,请参考以下文章

Django内置auth模块中login_required装饰器用于类视图的优雅方式

django 内置模块auth的login与authenticate功能简单测试

Django Auth认证模块

django ---Auth模块

Django Auth模块

Django 之 auth 模块