Django的CBV和FBV

1、FBV

FBV(function base views) 就是在視圖裏使用函數處理請求,也是咱們最開始接觸和使用的方式,普通項目中最多見的方式。html

urls.pypython

1
2
3
4
urlpatterns  =  [
     url(r '^admin/' , admin.site.urls),
     url(r '^login/$' , account.login),
]

views.pydjango

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 登陸驗證
def  login(request):
     message  =  ""
 
     if  request.method  = =  "POST" :
         user  =  request.POST.get( 'username' )
         pwd  =  request.POST.get( 'password' )
         =  Administrator.objects. filter (username = user, password = pwd).count()
         if  c:
             request.session[ 'is_login' =  True
             request.session[ 'username' =  user
             return  redirect( '/index.html' )
         else :
             message  =  "用戶名或密碼錯誤"
 
     return  render(request,  'login.html' , { 'msg' : message})

說白了,FBV就是在views.py文件中定義函數來處理用戶請求,函數中再定義若是是GET請求怎麼處理,POST請求怎麼處理,等等!服務器

 在普通項目中都會用都FBV,對請求數據的操做都會寫在url中,如:127.0.0.1:8000/index/addsession

2、CBV

CBV(class base views) 就是在視圖裏使用類處理請求。框架

urls.py函數

1
2
3
4
urlpatterns  =  [
     url(r '^admin/' , admin.site.urls),
     url(r '^login/$' , account.Login.as_view()),
]

views.pypost

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from  django  import  views
from  django.utils.decorators  import  method_decorator
 
class  Login(views.View):
     def  get( self , request,  * args,  * * kwagrs):
         return  render(request,  'login.html' )
         
     def  post( self , request,  * args,  * * kwagrs):
         user  =  request.POST.get( 'username' )
         pwd  =  request.POST.get( 'password' )
         =  Administrator.objects. filter (username = user, password = pwd).count()
         if  c:
             request.session[ 'is_login' =  True
             request.session[ 'username' =  user
             return  redirect( '/index.html' )
         else :
             message  =  "用戶名或密碼錯誤"
             return  render(request,  'login.html' , { 'msg' : message})

    當咱們使用CBV方式時,首先要注意urls.py文件中要寫成「類名.as_view()」方式映射,其次在類中咱們定義的get/post方法這些方法的名字不是咱們本身定義的,而是按照固定樣式,View類中支持如下方法:url

1
http_method_names  =  [ 'get' 'post' 'put' 'patch' 'delete' 'head' 'options' 'trace' ]

    當咱們發送GET請求時,類自動將GET請求轉到get方法去處理,其餘請求同理!spa

  根據method(請求方式)的不一樣,對請求數據進行不一樣的操做

  • GET      :從服務器取出資源(一項或多項)
  • POST    :在服務器新建一個資源
  • PUT      :在服務器更新資源(客戶端提供改變後的完整資源)
  • PATCH  :在服務器更新資源(客戶端提供改變的屬性)
  • DELETE :從服務器刪除資源
  • ……

 在Django Rest Framework框架中用到

相關文章
相關標籤/搜索