一.Http請求的過程
1.http的請求/響應(yīng)模式,先是用戶通過前端頁面發(fā)送一個http請求,請求內(nèi)容包括三部分:請求頭/空行/請求體(get方法沒有請求體)
例如:
抓包如下:
2.服務(wù)端就收到http的請求內(nèi)容的字符串后,進(jìn)行解析出相應(yīng)的請求頭(method /url/cookie等信息 )和請求體內(nèi)容,并將請求體的內(nèi)容轉(zhuǎn)換成對應(yīng)的key-value格式。
3.服務(wù)端再通過url去匹配對應(yīng)的URL路由(匹配規(guī)則是從上向下進(jìn)行正則匹配,若匹配成功則停止不再向下匹配),匹配成功后找到views中對應(yīng)的函數(shù)或類,執(zhí)行對應(yīng)函數(shù)或類中的業(yè)務(wù)代碼,處理成功后則進(jìn)行響應(yīng)的返回;
4.返回的形式有三種:render(request,’*.html’,locals())/HttpResponse(‘字符’)/redirect(‘/url/’)
注意:HttpResponse()是直接返回字符串給前端瀏覽器進(jìn)行顯示;render()分為三步:a.返回字符串;b.替換(渲染)變量;c.返回給瀏覽器;redirect()是先去匹配需要跳轉(zhuǎn)的url,再去匹配跳轉(zhuǎn)的url再去重復(fù)render()的過程;
5.前端收到響應(yīng),響應(yīng)的字符串內(nèi)容也是包含三部分:響應(yīng)頭/空行/響應(yīng)體。之后瀏覽器再去渲染返回的響應(yīng)體展示給用戶看。
公司主營業(yè)務(wù):做網(wǎng)站、成都網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出工布江達(dá)免費(fèi)做網(wǎng)站回饋大家。
二.FBV及CBV模式
FBV:function-views模式,也是常用的url對應(yīng)views.py中對應(yīng)的函數(shù);
CBV:class-views模式,是不常用的url對應(yīng)views.py中對應(yīng)的類的模式;
FBV模式:
urlpatterns = [
# path('admin/', admin.site.urls),
# url(r'^login/',views.login,name = 'login'),
url(r'^mainmenu/',views.mainmenu,name = 'mainmenu'),#FBV模式
url(r'^login/',views.CLOGIN.as_view(),name = 'mainmenu'),#CBV模式
]//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
from django.shortcuts import render,redirect
# Create your views here.
from django.views import View
def login(request):
if request.method == 'POST':
if request.POST.get('username') == 'admin' and request.POST.get('pwd') == 'admin':
#session的使用
request.session['username'] = request.POST.get('username')
request.session['pwd'] = request.POST.get('pwd')
return redirect('/mainmenu/')
#cookie的單獨(dú)使用
# ret = redirect('/mainmenu/')
# ret.set_cookie('username',request.POST.get('username'))
# return ret
else:
return render(request, 'login.html')
else:
return render(request, 'login.html')CBV模式:
urlpatterns = [
# path('admin/', admin.site.urls),
# url(r'^login/',views.login,name = 'login'),
url(r'^mainmenu/',views.mainmenu,name = 'mainmenu'),#FBV模式
url(r'^login/',views.CLOGIN.as_view(),name = 'mainmenu'),#CBV模式
]//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
from django.shortcuts import render,redirect
# Create your views here.
from django.views import View
class CLOGIN(View):
# 這個函數(shù)(了解作用即可,可不寫)作用類似于裝飾器,參數(shù)*args, **kwargs代表可傳進(jìn)去多個參數(shù)
def dispatch(self, request, *args, **kwargs):
# 重寫dispatch方法,相當(dāng)于執(zhí)行g(shù)et/post方法(關(guān)鍵看傳來的是那種請求方式,如果是get請求方式,就執(zhí)行g(shù)et方法)
result = super(CLOGIN,self).dispatch(request, *args, **kwargs)
return result
# 函數(shù)名只能是get,一旦有g(shù)et請求發(fā)來,就執(zhí)行此函數(shù)
def get(self,request):
return render(request, 'login.html')
# 函數(shù)名只能是post,一旦有post請求發(fā)來,就執(zhí)行此函數(shù)
def post(self,request):
if request.POST.get('username') == 'admin' and request.POST.get('pwd') == 'admin':
# session的使用
request.session['username'] = request.POST.get('username')
request.session['pwd'] = request.POST.get('pwd')
return redirect('/mainmenu/')
else:
return render(request, 'login.html')POST/GET請求方式不同:
瀏覽器默認(rèn)的方式是get形式,也是說只要不規(guī)定post請求,瀏覽器都是以get方式請求。post請求只有通過form表單和ajax實(shí)現(xiàn)。
三.歡迎關(guān)注筆者公眾號
網(wǎng)站題目:Django之請求生命周期及FBV/CBV模式
標(biāo)題URL:http://chinadenli.net/article40/jpcheo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、網(wǎng)站營銷、、營銷型網(wǎng)站建設(shè)、做網(wǎng)站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)