格式:web
請求頭和請求體數據庫
請求頭首行的格式是 請求方式 請求地址 http協議版本 ,(除了首行)使用\r\n分隔,和請求體須要使用2個\r\n來分隔django
響應頭和響應體json
GET和POST的請求頭又不同:GET只有請求頭,而POST有請求頭和請求體 跨域
請求頭:瀏覽器
User-Agent:訪問設備的信息服務器
Host:訪問的服務器地址數據結構
referer:作防盜鏈的socket
Content-Type:ide
響應頭:
詳細參考:
100 繼續 101 分組交換協 200 OK 201 被建立 202 被採納 203 非受權信息 204 無內容 205 重置內容 206 部份內容 300 多選項 301 永久地傳送 302 找到 303 參見其餘 304 未改動 305 使用代理 307 暫時重定向 400 錯誤請求 401 未受權 402 要求付費 403 禁止 404 未找到 405 不容許的方法 406 不被採納 407 要求代理受權 408 請求超時 409 衝突 410 過時的 411 要求的長度 412 前提不成立 413 請求實例太大 414 請求URI太大 415 不支持的媒體類型 416 沒法知足的請求範圍 417 失敗的預期 500 內部服務器錯誤 501 未被使用 502 網關錯誤 503 不可用的服務 504 網關超時 505 HTTP版本未被支持
1.對域名進行dns解析
2.瀏覽器(socket客戶端)根據返回的ip和端口進行向服務器發送請求
3.當服務器接收到請求
1.實現了wsgi協議的模塊,如:wsgiref或uwsgi進行數據的接收
2.而後將請求轉交給django的中間件(如:process_request)
3.路由系統匹配視圖函數
4.視圖函數進行業務處理 (orm的數據操做+模板渲染)
5.交給中間件的process_response方法進行傳遞
6.數據到達wsgi,而後wsgi把數據傳遞給瀏覽器,而後斷開連接
4.瀏覽器接收到數據後斷開連接
web服務的網關接口,它是一個協議,
實現wsgi協議的經常使用兩個模塊
wsgiref和uwsgi
實現wsgi的本質實際上是socket服務端
做用:中間件能夠對用戶的請求和響應進行批量操做
應用場景:
本身玩的:
黑名單
記錄日誌
實際應用:
權限校驗
用戶登陸
跨域問題
csrf(校驗:django自帶的)
相關知識點
1.流程實現原理:列表+翻轉列表
2.反射
本質:保存路由與視圖的對應關係的地方
模型視圖控制器
模型模板和視圖
FBV:寫函數進行業務邏輯的處理
CBV:寫類來進行業務邏輯的處理
本質是他們兩個都同樣,由於都是對應的是一個函數,cbv返回的就是一個view函數
1.Httpresponse
返回的是一個字符串
2.render
從數據庫拿到數據,而後對模板進行渲染,返回的是一個字符串
3.redirect
返回一個響應頭,他的location及對應的值就是你要跳轉的地方
分析1:多是csrf_token的問題,對post發送的數據進行攔截了
解決方法:在對一個的函數或類加裝飾器(目的:不對其進行csrf校驗)
from django.views.decorators.csrf import csrf_exempt(不校驗),csrf_protect(校驗)
分析2:可能傳過來的數據格式有問題,如:傳過來的數據是json的數據結構
解決辦法:1.你能夠去request.body中把數據取出來,而後轉換成字符串,再經過反序列化獲得數據(不推薦)
2.使用django-rest_framework來對數據進行解析(它裏面自帶着對json數據解析的解析器)