• django类视图MRO


    1.类视图定义:

    1、继承自 View  (from django.views import View)
    2、不同的请求方式 有不同的业务逻辑
        --类视图的方法,就直接采用 http的请求方式的名字作为函数名.例如: get ,post,put,delete...,以此类执行对应的方法。
    3、类视图方法的第二个参数 必须是请求实例对象 ,即 request。 返回值为HttpResponse及其子类。    
    

    代码示例:

    # book/views.py
    from django.views import View
    class CenterView(View):
        def get(self, request):
            return HttpResponse('个人中心展示')
        def post(self, request):
            return HttpResponse('个人中心修改') 
    

    思考:如何确定执行get还是post请求。 最终 dispatch()方法里执行了 request.method.lower() in self.http_method_names,得到了对应方法。

    类视图 url 定义:

    # book/urls.py
    from book.views import Centerview
    urlpatterns= [
    url(r'^center/$', CenterView.as_view()) # as_view()返回一个视图函数名。满足url(正则表达式,函数名)的规则。
    ]
    

    CenterView.as_view()最终调用的是dispatch()方法。

    2.用户中心添加登录验证

    此时,需要继承LoginRequiredMixin

    class LoginRequiredMixin(AccessMixin):
      def dispatch(self,request,*args,**kwargs):
          if not request.user.is_authenticated:
              returen self.handle_no_permission()
          return super(LoginRequiredMixin,self).dispatch(request,*args,**kwargs)
    

    但是LoginRequiredMixin类没有as_view()方法。
    所以使用的时候同时继承LoginRequiredMixinView

    # book/views.py
    from django.views import View
    from django.contrib.auth.mixins import LoginRequiredMixin
    class CenterView(LoginRequiredMixin,View):
        def get(self, request):
            return HttpResponse('个人中心展示')
        def post(self, request):
            return HttpResponse('个人中心修改') 
    

    3. MRO继承顺序


    此时的继承顺序为: LoginRequiredMixin,View, Object。
    因此,先调用LoginRequiredMixin类的dispatch,然后调用View类的dispatch,并不会调用 LoginRequiredMixin 其父类的 dispatch

  • 相关阅读:
    UVa
    UVa 1630
    P3891 [GDOI2014]采集资源
    一个非常naive的小学数学魔术证明题
    P2831 [NOIP2016 提高组] 愤怒的小鸟
    P4211 [LNOI2014]LCA
    P4137 Rmq Problem / mex 强制在线做法
    P2272 [ZJOI2007]最大半连通子图
    P5664 [CSP-S2019] Emiya 家今天的饭
    盘点linux操作系统中的10条性能调优命令,一文搞懂Linux系统调优
  • 原文地址:https://www.cnblogs.com/leimu/p/14414207.html
Copyright © 2020-2023  润新知