zoukankan      html  css  js  c++  java
  • doraemon的python CBV和FBV、视图装饰器

    ### 11.7 FBV和CBV
    
    #### 11.7.1 CBV的使用
    
    FBC: function based view
    
    CBV:class based view
    
    定义CBV:
    
    ```python
    from django.views import View
    
    class AdddPublisher(View):
        def get(self,request):
            """处理get请求"""
            return response
        
        def post(self,request):
            """处理post请求"""
            return response
    ```
    
    使用CBV
    
    ```python
    #在urls这个文件夹中使用
    url(r'^add_publisher/',views.AddPublisher.as_view())
    ```
    
    #### 11.7.2 as_view的流程
    
    1. 项目启动 加载url.py时,实行类.as_view()-------->view函数
    2. 请求到来的时候执行view函数;
       1. 实例化--------->self--------->self.request=request
       2. 执行self.dispatch(request,*args,**kwargs
          1. 判断请求方式是否被允许
          2. 允许  通过发射获取到对应请求当时 ---->handler
          3. 不予许 self.http_mothod_not_allowed--------->handler
          4. 执行handler(request,*args,**kwargs)
          5. 
    
    #### 11.7.3 视图加装饰器
    
    FBV 直接加装饰器
    
    CBV
    
    ```python
    from django.utils.decorators import method_decorator
    ```
    
    1.加在方法上
    
    ```python
    @method_decorator(timer)
    def get(self,request,*args,**kwargs):
        pass
    ```
    
    2.加载dicpatch方法上
    
    ```python
    @method_decorator(timer)
    def dispatch(self,request,*args,**kwargs):
        #print('before')
        ret = super().deipatch(request,*args,**kwargs)
        #print('after')
        return ret
    
    @method_decorator(timer,name = 'dispatch')
    class AddPublisher(View):
    ```
    
    3.加载类上
    
    ```python
    @method_decorator(timer,name='post')
    @method_decorator(timer,name='get')
    class AddPublisher(View):
    ```
    
    
    
    #### 11.7.4request对象
    
    ```python
    #属性
    request.method     请求方式
    request.GET    url上携带的参数
    resquest.POST   post请求提交的数据
    request.path_info   URL的路劲   不包含ip和端口 不包含参数
    request.body     请求体 b''
    request.FILES   上传的文件
    request.META   请求头
    request.COOKIES  cokkies
    request.session    session
    
    #方法
    request.get_full_path()    URL的路劲   不包含ip和端口 不包含参数
    request.is_ajax()    判断是否是ajax请求
    
    
    ```
    
    #### 11.7.5 response对象
    
    ```python
    from django.shortcuts import render,redirect,HttpResponse
    HttpResponse('字符串')
    render(request,'模板的名称',{k1:v1})
    redirect('重定向的地址')
    
    # HttpResponse如果要传非字典的东西
    from django.shortcuts import HttpResponse
    JsonResponse({})
    JsonResponse([].safe=False)
    
    ```
  • 相关阅读:
    C# 如何定义让PropertyGrid控件显示[...]按钮,并且点击后以下拉框形式显示自定义控件编辑属性值
    “Word自动更改后的内容保存到通用文档模板上。是否加载该模板?“的解决办法
    Web服务器之iis,apache,tomcat三者之间的比较
    [转]C#如何把文件夹压缩打包然后下载
    [转]C#压缩打包文件
    C#——Marshal.StructureToPtr方法简介
    [Android Pro] 内容提供者ContentProvider的基本使用
    [Linux] awk命令详解
    [Linux] AWK命令详解(大全)
    [Android UI] ProgressBar自定义
  • 原文地址:https://www.cnblogs.com/doraemon548542/p/11609128.html
Copyright © 2011-2022 走看看