首页 > 编程语言 > 详细

doraemon的python CBV和FBV、视图装饰器

时间:2019-09-29 18:13:39      阅读:73      评论:0      收藏:0      [点我收藏+]
### 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)

```

 

doraemon的python CBV和FBV、视图装饰器

原文:https://www.cnblogs.com/doraemon548542/p/11609128.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!