Django的CBV和FBV
阿新 • • 發佈:2018-02-07
blog 從服務器 rest turn body use borde bsp 不同
一、FBV
FBV(function base views) 就是在視圖裏使用函數處理請求,也是我們最開始接觸和使用的方式,普通項目中最常見的方式。
urls.py
1 2 3 4 |
urlpatterns = [
url(r ‘^admin/‘ , admin.site.urls),
url(r ‘^login/$‘ , account.login),
]
|
views.py
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‘ )
c = 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/add
二、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.py
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‘ )
c = 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類中支持以下方法:
1 |
http_method_names = [ ‘get‘ , ‘post‘ , ‘put‘ , ‘patch‘ , ‘delete‘ , ‘head‘ , ‘options‘ , ‘trace‘ ]
|
當我們發送GET請求時,類自動將GET請求轉到get方法去處理,其他請求同理!
根據method(請求方式)的不同,對請求數據進行不同的操作
- GET :從服務器取出資源(一項或多項)
- POST :在服務器新建一個資源
- PUT :在服務器更新資源(客戶端提供改變後的完整資源)
- PATCH :在服務器更新資源(客戶端提供改變的屬性)
- DELETE :從服務器刪除資源
- ……
在Django Rest Framework框架中用到
Django的CBV和FBV