djanog总结
目錄
1.簡述http協議
超文本傳輸協議
特點:
無狀態:第一次請求完畢,發起第二次請求,第二次請求還是如第一次請求一樣,他不會記憶你是否訪問過
短鏈接:一次請求一次響應,然后就斷開鏈接
格式:
請求頭和請求體
請求頭首行的格式是 請求方式? 請求地址? http協議版本 ,(除了首行)使用\r\n分隔,和請求體需要使用2個\r\n來分隔
響應頭和響應體
GET和POST的請求頭又不一樣:GET只有請求頭,而POST有請求頭和請求體
2.你了解的請求頭和響應頭有哪些?
請求頭:
User-Agent:訪問設備的信息
Host:訪問的服務器地址
referer:做防盜鏈的
Content-Type:
響應頭:
3.你了解的請求方式和狀態碼有哪些
請求方式
狀態碼(常見的)
?
詳細參考:
100 繼續101 分組交換協200 OK201 被創建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版本未被支持 詳細響應狀態碼?
4.django請求的生命周期 / 當在瀏覽器上輸入了一個網址,并敲下回車他中間發生了什么?
1.對域名進行dns解析
2.瀏覽器(socket客戶端)根據返回的ip和端口進行向服務器發送請求
3.當服務器接收到請求
1.實現了wsgi協議的模塊,如:wsgiref或uwsgi進行數據的接收
2.然后將請求轉交給django的中間件(如:process_request)
3.路由系統匹配視圖函數
4.視圖函數進行業務處理 (orm的數據操作+模板渲染)
5.交給中間件的process_response方法進行傳遞
6.數據到達wsgi,然后wsgi把數據傳遞給瀏覽器,然后斷開鏈接
4.瀏覽器接收到數據后斷開鏈接
5.什么是wsgi?
web服務的網關接口,它是一個協議,
實現wsgi協議的常用兩個模塊
wsgiref和uwsgi
實現wsgi的本質其實是socket服務端
6.django中間件的作用?應用場景?
作用:中間件可以對用戶的請求和響應進行批量操作
應用場景:
自己玩的:
黑名單
記錄日志
實際應用:
權限校驗
用戶登錄
跨域問題
csrf(校驗:django自帶的)
相關知識點
1.流程實現原理:列表+翻轉列表
2.反射
7.路由系統
本質:保存路由與視圖的對應關系的地方
8.什么是MVC,MTV?
MVC:model view controller
模型視圖控制器
MTV :model template view
模型模板和視圖
9.FBV和CBV
FBV:寫函數進行業務邏輯的處理
CBV:寫類來進行業務邏輯的處理
本質是他們兩個都一樣,因為都是對應的是一個函數,cbv返回的就是一個view函數
10.視圖函數的返回值?
1.Httpresponse
返回的是一個字符串
2.render
從數據庫拿到數據,然后對模板進行渲染,返回的是一個字符串
3.redirect
返回一個響應頭,他的location及對應的值就是你要跳轉的地方
問題
1.現象:兩個系統之間進行相互數據傳輸,系統1向系統2發送POST請求,但系統2的request.POST中沒有獲取到數據,可能是因為什么?
? 分析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數據解析的解析器)
?
轉載于:https://www.cnblogs.com/chunqiuyu/p/9909580.html
總結
- 上一篇: 学习JS的心路历程-参数传递方式(上)
- 下一篇: 3.1 普通型生成函数