• Django基于类的View


    Django中有两种方式来创建视图

    第一种:FBV(fucntion base view)

    FBV就是在url中一个路径对应一个函数

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^index/', views.index)
    ]

    在视图函数中

    def index(request):
        if request.method == "GET":
            return render(request, 'index.html')

     

    第二种:CBV(class base view)

    继承自: django.views.View (继承了View后,通过as_view(),会首先执行View类中的dispatch, 所以我们可以重载dispatch来实现认证装饰器的效果)

    CBV就是在url中一个路径对应一个类

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^index/', views.IndexView.as_view())     # 执行类后面的as_view()方法,是父类里面的方法
    ]

    在视图类中

    from django.views import View
    
    
    class IndexView(View):
      
        # 以get形式访问会执行get函数,一般情况下获取数据
        def get(self, *args, **kwargs):  
            return HttpResponse('666')
          
        # 以post形式访问的话会执行post函数,一般情况下发送数据
        def post(self, *args, **kwargs):  
            return HttpResponse('999')

    CBV重新定义dispatch函数

    所有的方法本质上都是通过dispatch这个函数反射执行,如果想要在执行get或post方法前执行其他步骤,可以重写dispatch

    class User(View):
        http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
    
        def dispatch(self, request, *args, **kwargs):
            print("before")
            obj = super(User, self).dispatch(request, *args, **kwargs)
            print("after")
            return obj
    
        def get(self, request):
            print("get...")
            return HttpResponse("get......")
    
        def post(self, request):
            print("post...")
            return HttpResponse("post......") 
    
     
  • 相关阅读:
    mysql高可用架构的构想
    shell进阶——expect免交互工具的使用
    Mysql性能优化之参数配置(转)
    mysql主从同步问题梳理
    使用mysql-proxy实现mysql的读写分离
    Mysql数据库的主从与主主
    Mariadb远程登陆配置及相关问题排查
    redis集群搭建及常用操作
    weblogic的linux静默搭建
    Python traceback 模块,追踪错误
  • 原文地址:https://www.cnblogs.com/vincenshen/p/6881702.html
Copyright © 2020-2023  润新知