zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Oracle/PLSQL: RTRIM Function-from cyber
    Oracle/PLSQL: LTRIM Function-from cyber
    Oracle AnyData Data Type Version 11.1-from cyber
    用 Sqlplus 创建用户的详细步骤 (centos 6.0,Oracle 11g)
    SQL_Plus操作命令-引自网络
    Linux下scp的用法-引自网络
    非学习型单层感知机的java实现(日志三)
    N维法向量与N维超平面的关系的简单证明(日志二)
    R语言分析(二)——薛毅R语言第二章后面习题解析
    R语言分析(一)-----基本语法
  • 原文地址:https://www.cnblogs.com/leimu/p/14414207.html
Copyright © 2011-2022 走看看