1. 程式人生 > >Django的CBV和FBV

Django的CBV和FBV

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