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'),
]        
                                      

转载于:https://www.cnblogs.com/endurance9/p/10290057.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值