zoukankan      html  css  js  c++  java
  • django 中基于类的视图

    django 视图 分为两种

      1.  FBV  基于函数的视图      function   based  view  

      2.  CBV  基于类的视图         class   based   view   

    基于类的视图   

    CBV :基于 类的视图函数

    1、后端逻辑处理时不用通过逻辑,来判断请求方式是get还是post请求
    在视图类中,定义了get方法就是写get请求的逻辑,定义类post方法时
    就是post请求逻辑。

    2、View 的源码分析过程
    1.先从url.py 文件的开始分析入手:
     1 from app01 import views
     2 
     3         urlpatterns = [
     4             path('admin/', admin.site.urls),
     5 
     6             path('login/', views.LoginView.as_view()),  # CBV 基于类的视图
     7             path('index/', views.index),  # FBV 基于函数的视图
     8         ]
     9 
    10         1. #views.LoginView.as_view() 必须是一个视图函数

    2. 点击进入源码
    View 大致执行流程:
    self.as_view() =====> self.dispatch() ====> self.get/post/等
    # 路由分发开始 获取具体的请求方面名,在通过反射具体的请求函数 视图函数
     1 class  View:
     2 
     3             http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
     4 
     5 
     6             def as_view(cls, **initkwargs):
     7 
     8                 def view(request, *args, **kwargs):
     9 
    10 
    11                     return self.dispatch(request, *args, **kwargs)
               return view
    12 13 14 def dispatch(self, request, *args, **kwargs): 15 16 # self.http_method_names=['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'] 17 18 if request.method.lower() in self.http_method_names: 19 # 用反射 获取函数 request.method.lower() # 为 get 20 handler = getattr(self, request.method.lower(), self.http_method_not_allowed) 21 # hander=getattr(self,"get") # 相当于执行了 该类下的get方法 22 else: 23 handler = self.http_method_not_allowed 24 25 #handler(request, *args, **kwargs) ====> get(request,*args, **kwargs) 26 27 return handler(request, *args, **kwargs) # 相当于类下的 执行 return self.get(request,)

    3. 在view.py 文件中:
          
     1 from django.view import View
     2 
     3         # CBV 基于类的视图
     4         class LoginView(View):
     5 
     6             def get(self,request,*args, **kwargs):
     7                 
     8 
     9                 return render(request,"login.html")
    10 
    11             def post(self,request,*args, **kwargs):
    12 
    13                 return redirect('/index/')
    14 
    15 
    16         # FBV 基于函数的视图
    17         def  index(request):
    18 
    19             return render(request,"index.html")



  • 相关阅读:
    C# 遍历类字段 及 字段值
    u8 采购到货单中的 业务类型 没有表字典,是系统预置 存入表也是文字: 普通采购 固定资产
    win7 X64 OLEDB读取EXCEL提示“未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序”
    关于 C# select 读取 Excel 数据 为空,或成科学计数法解决方案
    如何设置C#程序在Windows 7 Vista下以管理员权限运行
    C# OLE DB 的连接方式下 对 sql 参数的操作 需要改成 ? 号
    NHibernate (一) 五部曲
    做优秀产品经理
    Python Test in Hudson
    [转载]Openstack Essex安装文档资料
  • 原文地址:https://www.cnblogs.com/knighterrant/p/10503645.html
Copyright © 2011-2022 走看看