这里指的是Django的WEB开发中,后台响应的实现方式。
1、FBV
所谓的FBV,指的是Function base views,指的是在视图文件里通过函数方式处理用户请求。在Django开发的初级阶段,我们一直使用的是这种方法。
2、CBV
所谓的CBV,指的是Class base views,指的是在视图文件里通过类处理用户请求。
url(r'^login.html$',views.Login)
url对应到类,根据method的方法不同,分别执行类的get或者post方法
from django.views import View class Login(View): def get(self,request): pass def post(self): pass url(r'^login.html$',views.Login as_view())
这样会执行Login类的get或者post函数。
form表单只能以get或者post方式提交,但是使用Ajax可以使用其他方式:
get post put delete
分别对应查、创建、更新、删除。
def get(self,request): return render(request,'login.html') def post(self,request): return HttpResponse('Login.post')
get或者post方法执行之前,先自行dispatch,使用反射方法找到method的同名方法。
可以自行修改dispatch方法:
Class Login(view): def dispatch(self,request,*args,**kwargs): obj = super(Login,self).dispatch(self,request,*args,**kwargs) return obj
如果不分什么method,都需要做的操作,可以写在自己的dispatch函数中。
Django的url是将一个请求分配给可调用的函数的,而不是一个class。针对这个问题,class-based view提供了一个as_view()静态方法(也就是类方法),调用这个方法,会创建一个类的实例,然后通过实例调用dispatch()方法,dispatch()方法会根据request的method的不同调用相应的方法来处理request(如get() , post()等)。到这里,这些方法和function-based view差不多了,要接收request,得到一个response返回。如果方法没有定义,会抛出HttpResponseNotAllowed异常。
浙公网安备 33010602011771号