Django之CBV和FBV

时间:2022-10-21 16:46:21

Django之CBV和FBV

  CBV和FBV是C和F的区别:

    C是Class,F是Function

  在请求中,有GET请求和POST请求。

  在写CBV时,url是可以对应一个类的,在类中,分别写出GET和POST的方法。

  eg:在url中:

url(r'^login.html$',views.Login)

    在views中:Class根据url的提交方式,决定使用get方法,还是post方法。

class Login(request):
def get(self):
pass
def post(self):
pass   

  在请求来时,Login会去判断来个请求类型是post还是get。但是要先继承一个方法,django.views 中的 View。

from django.views import View
class Login(View):
def get(self,request): #request会封装请求的所有数据
#return HttpResponse('Login.get')
     return render(request,'login.html')
def post(self,request):
     print(request.POST.get('user'))
return HttpResponse('Login.post')

 login.html

<body>
<form method='POST' action='/login.html'>
<input type='text' name='user'/>
<input type='submit' value='提交'/>
</form>
</body>

  注意:form表单递交,是有POST和GET。ajax提交除了POST和GET还有好多提交方式。

  这里的request封装了request的请求的数据。

  在CBV的url中,都要在view里叫as_view()。

url(r'^login.html$',views.Login.as_view())

  在class View 方法中,有四种常见的方法:

    get查, post创建, put更新,delete删除

  这四种方法是Ajax提交是才能用的,get和post可以在from表单用。

----------------------------- 分割线 -----------------  

  在写C和F时,url找到相应中的类和函数中的请求方法,是用的反射getattr来实现的。

  在View中,先会执行dispath函数,在dispath函数中,对请求进行分类,看请求是post还是get。

def dispath(self,request,*args,**kwargs):
obj = surper(Login,self),dispath(request,*args,**kwargs)
return obj

  这个dispath就相当于一个装饰器。

-------- END ---------