一.Http請求的過程
1.http的請求/響應模式,先是用戶經過前端頁面發送一個http請求,請求內容包括三部分:請求頭/空行/請求體(get方法沒有請求體)
例如:
抓包以下:
2.服務端就收到http的請求內容的字符串後,進行解析出相應的請求頭(method /url/cookie等信息 )和請求體內容,並將請求體的內容轉換成對應的key-value格式。
3.服務端再經過url去匹配對應的URL路由(匹配規則是從上向下進行正則匹配,若匹配成功則中止再也不向下匹配),匹配成功後找到views中對應的函數或類,執行對應函數或類中的業務代碼,處理成功後則進行響應的返回;
4.返回的形式有三種:render(request,’*.html’,locals())/HttpResponse(‘字符’)/redirect(‘/url/’)
注意:HttpResponse()是直接返回字符串給前端瀏覽器進行顯示;render()分爲三步:a.返回字符串;b.替換(渲染)變量;c.返回給瀏覽器;redirect()是先去匹配須要跳轉的url,再去匹配跳轉的url再去重複render()的過程;
5.前端收到響應,響應的字符串內容也是包含三部分:響應頭/空行/響應體。以後瀏覽器再去渲染返回的響應體展現給用戶看。html
二.FBV及CBV模式
FBV:function-views模式,也是經常使用的url對應views.py中對應的函數;
CBV:class-views模式,是不經常使用的url對應views.py中對應的類的模式;
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模式 ]
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ajax
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的單獨使用 # 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模式:django
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): # 這個函數(瞭解做用便可,可不寫)做用相似於裝飾器,參數*args, **kwargs表明可傳進去多個參數 def dispatch(self, request, *args, **kwargs): # 重寫dispatch方法,至關於執行get/post方法(關鍵看傳來的是那種請求方式,若是是get請求方式,就執行get方法) result = super(CLOGIN,self).dispatch(request, *args, **kwargs) return result # 函數名只能是get,一旦有get請求發來,就執行此函數 def get(self,request): return render(request, 'login.html') # 函數名只能是post,一旦有post請求發來,就執行此函數 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請求方式不一樣:
瀏覽器默認的方式是get形式,也是說只要不規定post請求,瀏覽器都是以get方式請求。post請求只有經過form表單和ajax實現。
三.歡迎關注筆者公衆號cookie