zoukankan      html  css  js  c++  java
  • 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'),
    ]        
                                          
    
  • 相关阅读:
    BSGS算法(大步小步算法)
    UVA-11426【GCD
    UVA-1637【Double Patience】(概率dp)
    UVA-11174【Stand in a Line】
    About
    51nod 1355 斐波那契的最小公倍数
    CodeForces
    CodeForces
    CodeForces
    CodeForces 901C Bipartite Segments
  • 原文地址:https://www.cnblogs.com/endurance9/p/10290057.html
Copyright © 2011-2022 走看看