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装饰器用于类视图的优雅方式