最新版Django全套視頻(django框架快速上手)_Python全棧_累計播

2.2 - GET請求和POST請求
定義
要區(qū)分GET和POST處理

視圖函數整體樣例

公司的視圖函數代碼基本結構

GET處理
提交表單數據更傾向于POST,更加隱秘

URL里【?】后面的就是查詢字符串,所以不能傳遞敏感數據,數據都在地址欄里
通常就傳一些輔助類信息,比如頁碼

GET方法示例
類型是字典,取[key]的value

【views.py】

【urls.py】

沒有給a賦值的情況
MultiValueDictKeyError(錯誤類型)
在Traceback里找到自己寫的代碼,檢查變量

結合KeyError可知沒有沒有查到key的值
用溫和的get就不會報錯,因為給了默認值
request.GET.getlist(key)
把request.GET整體打印出來,是一個字典,值是數組

把a打印出來,只打印數組最后一項

getlist()打印數組

輸出結果

用處:多選,多個值
思考:計算器功能既能用正則表達去取,又能拿GET查詢字符串做??醋约哼x擇。

post處理
使用場景

- action是給哪個路由發(fā)請求(發(fā)給誰)
- 一個組件框要給它起名,傳過去時username就是它的key,數據就是value
服務器端接收參數
和get完全一樣

【views.py】
寫一個全局變量存表單框,相當于寫一個html

回車后發(fā)送get請求返回一個POST_FORM,然后用戶發(fā)送post請求服務器獲取name
提交后提示403:

防范csrf攻擊,還學不到,先關上

F12【網絡】->【消息頭】看請求方法
【參數】看請求體里的表單數據

小結

- get:少而美的數據
- post:敏感的數據、大量的數據(密碼、文章)
2.03-Django的設計模式及模板層
MTV是MVC的升級版
傳統(tǒng)的MVC
M層:基于一個規(guī)則去操作數據庫,原來的傳統(tǒng)mysql操作語句封裝成一套自己的語法,專門用于開發(fā),比直接寫sql語句更簡化
V層:向用戶展示什么數據,展示怎樣的數據
C層:核心大腦,統(tǒng)籌全局請求傳輸

Django的MTV模式
在V層處理、規(guī)整好數據,一股腦丟給T層顯示
原來MVC中的C層在MTV里其實就是主路由,只負責url分發(fā),所以可以說是C-MTV模式

前后端不分離,高耦合
模板
把視圖里的python變量,通過字典的形式傳遞到html里

模板配置
只要配置DIRS就可以了,其他默認
DIRS的值是數組,可以寫多個,得到templates的絕對路徑

BASE_DIR經常充當的角色是拼接一個路徑
創(chuàng)建templates
在mysite目錄下創(chuàng)建templates文件夾,與manage.py同級

【settings.py】

模板的加載方式
方案1

【views.py】

【test_html.html】

【urls.py】

方案2(后期出現(xiàn),比方案1好)
獨立于loader的render
字典數據可有可無

視圖層與模板層之間的交互
視圖函數:Python變量封裝成字典{"":"","":""}
模板層:{{變量名}}調用字典
【views.py】

【html】

2.04-模板層-變量和標簽
模板層-變量
能傳到模板中的數據類型

- 調一個索引的元素.index,和python不一樣,在python里是變量[index]
- .key是傳入字典時,字典里也定義了字典
- 可以調用某個對象里的方法,后面不需要括號
- 和Vue的template差不多,以及jsp

【html】

【views.py】

運行結果

模板層-標簽
if判斷、for循環(huán)等

if 標簽
一定要記得結束標簽

if里括號是無效的,看官方文檔

【views.py】

【html】

練習-計算器頁面

【html】

提交的時候op根據value去選擇
自動格式化代碼:CTRL + ALT + L
刪掉默認的value

【views.py】
要顯示用戶提交之前填的數,就要原封不動地傳回去。locals()把當前函數里的局部變量直接封裝成字典

【html】
selected默認顯示選項,但是需要去做判斷,得到傳回來的op值

for 標簽
empty:數據是空值時執(zhí)行內容,省去自己判斷空

內置變量forloop

【html】
forloop.counter


forloop.first


【views.py】
返回一個數組

2.05-模板層-過濾器和繼承
模板層過濾器
對視圖傳過來的變量的值進行修整和處理,不需要視圖做

常用過濾器
- add就是在value上做加法運算,傳的參數是字符串類型,要加引號
- safe就是不對字符串轉義,比如傳入js代碼,不直接顯示為純字符串,而是當成js可執(zhí)行代碼
html轉義后的代碼,把尖括號等轉義


模板層-繼承

如果需要修改同樣的 頭尾部分,繼承可以簡化,只需要修改base.html
中間部分允許被修改,就在中間加block標簽

父模板:base.html

【views.py】

【base.html】

【sport.html】

重寫規(guī)則
視圖傳的變量繼承不了,比如子模板拿不到父模板的變量


只是純模板的技術,sport進的是sport的views視圖函數,整個過程并沒有走base的views,拿不到base的變量
2.06-url反向解析
代碼中url出現(xiàn)的位置,模板和視圖

url書寫規(guī)范,絕對地址和相對地址
第一種相對地址(高頻),取出協(xié)議、ip、端口

第二種相對地址,取出最后一個/之前的內容

【views.py】

【html】

【urls.py】

第三個鏈接訪問的絕對地址是:http://127.0.0.1:8000/test/test_url_result

路由里沒配置,所以404

url反向解析
用name去查找

模板通過url標簽傳參,填充到path轉換器上

傳參后url地址收到參數

無論如何修改url地址,只要沒有修改path里的name,模板頁面都能取到對應的url

沒有用{%url%}標簽定義的地址(絕對地址的寫法),但凡路由變了,就會受影響
在視圖里使用

瀏覽器如何知道302跳轉到哪里去?
通過響應頭標記,Location響應頭

3.01-靜態(tài)文件
什么是靜態(tài)文件
在服務器加載

用F12查看靜態(tài)文件,發(fā)送了一系列請求

過濾器選擇不同類型的請求

靜態(tài)文件配置
一旦被瀏覽器讀到標簽,就會對src地址發(fā)送http請求

django怎么知道靜態(tài)文件放哪
(圓括號是元組,句尾需要逗號)
