django CBV模型

1.CBV 和 FBV

   FBV function  based view     CBV class based view


2. CBV的使用流程

   在 view中 导入   from django.views import View

   1.创建一个类   继承父类   View 

class Cbv(View):
    def get(self,request):
        return HttpResponse('Ok!!!')
    def post(self,request)
        pass

      自动判断请求方法  而执行相对应函数
    2. 在路由 url文件中 
                 url(r'^add_press/$', views.Cbv.as_view())

3.执行原理   views.Cbv.as_view()

            三个方法 :as_vieiw---->view---->dispatch-----存在 / 不存在 (请求方法) ----返回响应

    1. as_vieiw() 中执行 view 方法   return self.dispatch() -->执行dispatch

       dispatch():中  通过 getattr 反射 拿到 子类的 get 或post 方法   给到handler 再返回执行

          1.判断请求方法 是否存在于  http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

          2. 如果存在 就执行子类 中对应的方法(get,post.......)

          3.handler = getattr(self, request.method.lower(), self.http_method_not_allowed) 

               此时handler 就是一个 方法    return  handler (request ,*arg,**kwgs) 加括号执行

     2.返回handler   相当于是一个HttpResponse 对象   返回到django  处理 httpresponse 响应

     3.如果请求方法 不存在,则django内置方法 返回一个 不存在的   HttpResponse 页面 

6. 加装饰器

     FBV 普通加法
            @wrapper
            def test()
        CBV 
            from django.utils.decorators import method_decorator   使用django 封装的方法  使用装饰器
            1. 加在方法上
                @method_decorator(timer)
                def get(self, request):
            2. 加在dispatch上                   在CBV中只有加载dispatch 上才有用
                @method_decorator(timer)
                def dispatch(self, request, *args, **kwargs)
            3. 加在类上
                @method_decorator(timer,name='post')
                @method_decorator(timer,name='get')
                class AddPress(View):

7.  request 和response

       1.request .GET('name')  获取url中的参数                            2.request.POST('name') 获取 form提交的 或ajax 提交的data数据

       3. request. file 获取上传文件                                                4.request.body数据真正存放的地方

       5.request.get_host                                                                6.request.is_ajax

       HttpResponse          render                redirect

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值