cczhy

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

这里指的是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异常。

posted on 2021-09-09 14:14  cczhy  阅读(164)  评论(0)    收藏  举报