• 02 CBV vs FBV


    CBV和FBV对比

    1、路由绑定

    urlpatterns = [
        # 1)项目启动,将test函数地址绑定给/test/路由
        # 2)请求/test/访问后台,后台就会调用绑定的test函数
        url(r'^test/$', views.test),
     
        # 1)项目启动,将as_view()函数执行结果返回的view函数地址绑定给/test/路由
        # 2)请求/test/访问后台,后台就会调用绑定的view函数
        # 3)view函数会将请求交给dispatch方法完成分发,分发(反射)给视图类的不同方法处理请求
        url(r'^test/$', views.Test.as_view()),
    ]
    

    2、业务处理

    fbv没一个接口都会对应一个函数来响应请求
     
    cbv可以将一个资源的增删改查所有操放在一个类中管理,在内部再分方法逐一处理 (高内聚低耦合:六个接口和一个类有关,但都能在类内部处理)
    

    继承View的目的

    i)继承as_view()方法,完成路由的配置,添加属性
    ii)继承dispath()方法,完成请求分发,判断请求的方式,并调用类或者函数
    
    注:如果自己写as_view()和dispath()方法,自定义视图类可以不用继承任何类的
    

    Django中三个View

    三个View其实是同一个类

    from django.http import JsonResponse
    from django.views import View  #  从views/目录下的__init__管理包文件中导入
    from django.views.generic import View  #  从views/generic/目录下的__init__管理包文件中导入
    from django.views.generic.base import View  #  从views/generic/base/目录下直接导入View模块文件
     
     
    class Test(View):
        def get(self, request, *args, **kwargs):  # *args接收无名分组的参数 **kwargs接收有名分组的参数
            return JsonResponse('cbv ok', safe=False)  # JsonResponse 不能返回 非字典类型的数据.   safe设置为 False 就可以返回非字典类型了
    
  • 相关阅读:
    爬虫之初试
    [已解决]疑问:关于postgres的to_number()
    随笔
    简单的任意列数均匀布局
    去除VS2010中中文注释下的红色波浪线
    DataTable举例
    DevExpress::XtraBars::BarEditItem获取EditValue值事件
    List<String^>^ 引用空间
    TreeList的VisibleNodesCount,Noes.Count,AllNdoesCount以及焦点节点的删除
    获取工程的exe文件的所在目录
  • 原文地址:https://www.cnblogs.com/cnhyk/p/12354570.html
Copyright © 2020-2023  润新知