day18-django FBV/CBV
一、引子
之前我们讲了 一个路由的指向view.py中的一个函数,今天我们来研究通过路由如何指向一个类,这个设计到django的CBV和FBV的概念,今天我们就来好好说说这个两个产物到底是啥?
- FBV => function base view 基于函数视图 => /index/ -->指向函数
- CBV => class base view 基于类视图 => /index/--> 指向类
二、FBV
之前我们学习使用的都是这种方式, 居于函数视图,FBV, function base view


三、CBV
3.1、语法
说明:CBV这种是指的是类视图,即:/index/--> 指向类
|
1
2
3
4
5
6
7
8
9
10
11
12
|
url.py index -> view.类名.as_view() #这个是固定用法view.py from django.views import View #导入View模块,并且继承这个类 class 类名(View): def get(self,request): #接收客户端是get请求的,则执行是get方法 .... def post(self,request): #接收客户端是post请求的,则执行是post方法 .... |
3.2、举个栗子,对比一下
home.html
1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <h3>CBV 请求方式 {{ method1 }}</h3> 9 10 11 <form action="/home/" method="POST"> 12 <h3>CBV form 请求方式 {{ method }}</h3> 13 14 <input type="text"> 15 <p></p> 16 <input type="submit" value="提交"> 17 </form> 18 </body> 19 </html>
url

views 代码
1 from django.views import View #1,先导入 父类 2 3 class Home(View): 4 5 def post(self,request): #2,定义方法 ,还有很多其他方法 6 M=request.method 7 return render(request,"home.html",{'method':M}) 8 9 10 def get(self,request): 11 M1=request.method 12 return render(request,"home.html",{'method1':M1})
结果:当第一次请求时,get 方式,页面中显示 如下

第二次请求:点击提交, 结果如下

四、CBV原理说明
CBV 中 Home 类是怎么判读,请求方式的呢? 还有其他什么方法,
查看 view 源码
得到 答案:请求方式 种类
ttp_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

根据说明来判断方法
根据类的反射 ,先执行dispatch 方法,获取请求方式,再执行类中具体方法

知道真相的我们,就希望搞点小动作
我们可以自己定义 dispatch 方法,继承父类中的 dispatch 方法,在请求之前,之后搞些小动作。
貌似很厉害的样子,只是不知道具体用户,先搞个小栗子把。


浙公网安备 33010602011771号