fbv就是一個(gè) url對應(yīng)一個(gè)函數(shù)
cbv就是一個(gè)url對應(yīng)一個(gè)類
cbv
- cbv定義類的時(shí)候必須要繼承view
- 這個(gè)類里面可以寫好多函數(shù)方法赦肋,但是本質(zhì)上都是通過dispatch這個(gè)函數(shù)反射執(zhí)行
- 在寫url的時(shí)候必須要加as view
定義cbv
給cbv添加裝飾器的三個(gè)位置
csrf的添加
必須要加到dispatch里面
-
FBV和CBV
function base view, URL對應(yīng)函數(shù)
class base view裹虫, URL對應(yīng)類PS: form表單提交: GET,POST *** Ajax提交數(shù)據(jù): GET,POST ['get'獲取, 'post'創(chuàng)建, 'put'更新, 'patch'局部更新, 'delete'刪除, 'head', 'options', 'trace'] -> restful規(guī)范
a. 基本使用
b. 基于dispatch和繼承實(shí)現(xiàn)用戶登錄代碼
c. 裝飾器
get,post方法上 class LoginView(View): def dispatch(self, request, *args, **kwargs): return super(LoginView,self).dispatch(request, *args, **kwargs) def get(self,request): return render(request,'login.html') @method_decorator(test) def post(self,request):
request.GET
request.POST # 請求頭中的:content-type
request.body
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'alex' and pwd == "alex3714":
生成隨機(jī)字符串
寫瀏覽器cookie: session_id: 隨機(jī)字符串
寫到服務(wù)端session:
{
"隨機(jī)字符串": {'user_info':'alex}
}
request.session['user_info'] = "alex"
return redirect('/index.html')
return render(request, 'login.html')
dispatch方法上
class LoginView(View):
@method_decorator(test)
def dispatch(self, request, *args, **kwargs):
return super(LoginView,self).dispatch(request, *args, **kwargs)
def get(self,request):
return render(request,'login.html')
def post(self,request):
request.GET
request.POST # 請求頭中的:content-type
request.body
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'alex' and pwd == "alex3714":
生成隨機(jī)字符串
寫瀏覽器cookie: session_id: 隨機(jī)字符串
寫到服務(wù)端session:
{
"隨機(jī)字符串": {'user_info':'alex}
}
request.session['user_info'] = "alex"
return redirect('/index.html')
return render(request, 'login.html')
類上
@method_decorator(test,name='get')
class LoginView(View):
def dispatch(self, request, *args, **kwargs):
return super(LoginView,self).dispatch(request, *args, **kwargs)
def get(self,request):
return render(request,'login.html')
def post(self,request):
# request.GET
# request.POST # 請求頭中的:content-type
# request.body
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'alex' and pwd == "alex3714":
# 生成隨機(jī)字符串
# 寫瀏覽器cookie: session_id: 隨機(jī)字符串
# 寫到服務(wù)端session:
# {
# "隨機(jī)字符串": {'user_info':'alex}
# }
request.session['user_info'] = "alex"
return redirect('/index.html')
return render(request, 'login.html')
特殊:CSRF Token只能加到dispatch
from django.views.decorators.csrf import csrf_exempt,csrf_protect
class LoginView(View):
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super(LoginView,self).dispatch(request, *args, **kwargs)
def get(self,request):
return render(request,'login.html')
def post(self,request):
# request.GET
# request.POST # 請求頭中的:content-type
# request.body
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'alex' and pwd == "alex3714":
# 生成隨機(jī)字符串
# 寫瀏覽器cookie: session_id: 隨機(jī)字符串
# 寫到服務(wù)端session:
# {
# "隨機(jī)字符串": {'user_info':'alex}
# }
request.session['user_info'] = "alex"
return redirect('/index.html')
return render(request, 'login.html')