文章目錄
- Django靜態檔案配置與request物件方法
-
- 一、靜態檔案與配置
-
- 1.靜態檔案
-
- 範例:
- 2.靜態檔案配置
- 3.靜態檔案進階操作
-
- 3.1 介面前置詞
- 3.2 驗證:
- 補充:
-
-
- 1.你在同一個視窗開了好幾個Django專案,一直在跑的其實是第一個Django專案
- 2.取消網頁瀏覽器快取
-
- 3.3 動態解析
-
- 動態解析模板語法:
- 二、request物件方法
-
- 1.form表單回顧
- 2. form表單三個屬性:
-
- 2.1 action引數
-
- 三種書寫方式:
- 2.2 method引數:
-
- 請求方式:
- 3.request物件方法
-
- 3.1 request.method
-
- 檢視表函式固定格式:
- 3.2 request.POST
-
-
- requset.POST.get
- request.POST.getlist
-
- 3.3 request.GET
-
-
- request.GET.get
- request.GET.getlist
-
- 3.4 request.FILES
-
-
- request.FILES.get
- request.FILES.getlist
-
- 三、總結
Django靜態檔案配置與request物件方法
少年,我看你骨骼精奇,不如來我部落格看看可好
一、靜態檔案與配置
在平時,我們之所以能夠在瀏覽器裡面輸入網址就可拿到對應的資源,是因為開發者開設了該資源對應的訪問介面,所以我們能夠訪問到對應的資源。
1.靜態檔案
- 所謂靜態檔案:寫好之後不會自動動態改變的檔案資源,例如我們寫好的css檔案、js檔案、圖像檔案、第三方框架檔案
- 我們預設將所有的靜態檔案都放在一個static資料夾內,static目錄下基本還會再分幾個資料夾,我們的css檔案,js檔案,圖像檔案、第三方檔案資源等都放在這下面
- 在Django專案中是沒有這些資料夾的需要我們手動建立。
範例:
舉個範例:在加在靜態資源的時候沒有開設對應的訪問介面
我們先來執行一個Django專案並建立一個static靜態資料夾。
urls.py檔案:
1 2 3 4 5 6 | from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.login), ] |
views.py檔案:
1 2 | def login(requset): return render(requset,'login.html') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登入介面</title> <link rel="stylesheet" href="../static/bootstrap-3.3.7-dist/css/bootstrap-theme.min.css"> <script src="../static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="row"> <h1 class="text-center">登入</h1> <div class="col-lg-8 col-md-offset-2"></div> </div> </div> </body> </html> |
接下來我們啟動Django專案並訪問,如下:
我們在login右鍵點選檢查,開啟網路主控臺,重新整理頁面,如下:
看到bootstrap框架報錯:404,接下來我們點進去看一下:
然後我們複製請求URL,在瀏覽器中開啟:
還是報錯,請求的資源不存在!我們明明已經匯入了啊!這是為何呢?static路徑等都沒有問題啊!
這是因為我們根本沒有開設該資源對應的介面!所以無法訪問!
2.靜態檔案配置
為了解決上面的問題,我們setting.py加入如下程式碼,也就是靜態檔案配置:
1 2 3 4 | # setting.py檔案:靜態檔案配置,可以配置多個 STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static'), ] |
靜態檔案配置就是將static的檔案路徑加入。
然後我們再來訪問頁面,重新啟動Django專案。
3.靜態檔案進階操作
針對以上操作,你是不是有很多疑問?小腦袋瓜子是不是充滿了很多問號?
首先,我們來介紹一下,介面前置詞。
3.1 介面前置詞
- 所謂介面前置詞,就是相當於一個令牌
- 如果你想要訪問靜態檔案資源,那麼必須以static開頭,你書寫了介面前置詞之後 就擁有了訪問下列串列中所有資料夾內部資源的許可權。
- 預設書寫在
setting.py 檔案中,可有多個介面,從上往下依次搜尋,都沒有就會報錯。
1 2 3 4 5 6 | STATIC_URL = '/static/' # HTML中使用的靜態資料夾前置詞,這就是介面前置詞 STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), # 靜態檔案存放位置 os.path.join(BASE_DIR,'static1'), #可以開設多個介面 os.path.join(BASE_DIR,'static2'), ] |
例如,來上面的範例,因為介面前置詞匹配到
不信,我們來驗證:
3.2 驗證:
首先,我們新建static1,static2,static1下面新建a.txt,static2下面新建b.txt。
內容如下:
1 2 3 4 | static1下面的a.txt內容 I'm static A static2下面的b.txt內容 I'm static B |
然後啟動專案,我們來訪問:
還不信的話,我們來修改一下
然後重啟專案訪問。
補充:
當你在寫Django專案的時候,可能回出現後端程式碼修改了但是前端頁面沒有變化的情況:
1.你在同一個視窗開了好幾個Django專案,一直在跑的其實是第一個Django專案
2.取消網頁瀏覽器快取
右鍵–》檢查–》shortcuts–》Preferences–》Disable cache…
Edge瀏覽器:(中文是不是看起來很舒適?)
谷歌瀏覽器
3.3 動態解析
接著上面的範例,我們再來啟動Django專案。
然後我們把令牌改為
這時,產品經理拍著你的肩膀突然來一句說:這樣不好,在改一下…
然後你又要改回去,就這樣反反覆復。
於是就出現了動態解析。
動態解析模板語法:
1 2 3 | {<!-- -->% load static %} 模板語法 <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}"> <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script> |
然後我們將模板語法加入html檔案中,然後重啟Django專案。
我們在來修改令牌,然後隨便你怎麼改,令牌都可以動態解析到,都可以訪問到資源。
還不明白?我們來看一張圖,有圖有真相:
二、request物件方法
1.form表單回顧
- 作用:將使用者輸入的資料提交到後端,預設使用的是
get 請求。
2. form表單三個屬性:
2.1 action引數
作用:控制後端提交的路徑
三種書寫方式:
- 不寫:預設朝當前頁面地址提交資料
- 只寫後序:/index/,將當前伺服端的ip+port拼接到後序前面然後訪問
- 全寫:https://www.mzitu.com,向指定地址提交資料(指名道姓)
範例:例如我們寫一個簡單的登入頁面
繼續使用上面的程式碼,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登入介面</title> {<!-- --># <link rel="stylesheet" href="/shawn/bootstrap-3.3.7-dist/css/bootstrap-theme.min.css">#} {<!-- --># <script src="/shawn/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>#} {<!-- -->% load static %} {<!-- -->#模板語法,類似於導模組#} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}"> <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script> </head> <body> <div class="container"> <div class="row"> <h1 class="text-center">登入</h1> <div class="col-lg-8 col-md-offset-2"></div> <form action=""> <p>username:<input type="text" name="username" class="form-control"></p> <p>password:<input type="password" name="password" class="form-control"></p> <input type="submit" class="btn btn-success btn-block"> </form> </div> </div> </body> </html> |
view.py檔案
1 2 3 4 5 6 | from django.shortcuts import render # Create your views here. def login(requset): print("我看你骨骼驚奇,來來看我的部落格吧!") return render(requset,'login.html') |
get請求:
不寫
或者只寫後序:
然後提交資料
然後驚奇的發現我們提交的資料都跑到URL
這是因為action引數預設使用的是get請求,pycharm內列印出如下內容:
2.2 method引數:
作用:指定請求的方式
請求方式:
-
get請求:資料是直接放在URL後面的, 以"?「分割URL和傳輸資料,引數之間以」&"相連
例如:
http://127.0.0.1:8888/login/?username=123&password=123 -
post請求:把提交的資料放在HTTP包的請求體中,不會顯示到URL中,就是隱藏起來。
範例:在form表單中加入method引數將請求方式改為post請求,再次啟動Django專案。
post請求:
在login.html修改檔案如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登入介面</title> {<!-- --># <link rel="stylesheet" href="/shawn/bootstrap-3.3.7-dist/css/bootstrap-theme.min.css">#} {<!-- --># <script src="/shawn/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>#} {<!-- -->% load static %} {<!-- -->#模板語法,類似於導模組#} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}"> <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script> </head> <body> <div class="container"> <div class="row"> <h1 class="text-center">登入</h1> <div class="col-lg-8 col-md-offset-2"></div> <form action="login.html " method="post"> <p>username:<input type="text" name="username" class="form-control"></p> <p>password:<input type="password" name="password" class="form-control"></p> <input type="submit" class="btn btn-success btn-block"> </form> </div> </div> </body> </html> |
然後點選提交:
結果報錯403:請求資源不可用,拒絕訪問。
這是因為中介軟體的作用(暫時不用理解): 需要註解
剛開始學習時可在設定檔中暫時禁用csrf中介軟體,方便表單提交測試。
1 2 3 4 5 6 7 8 9 | MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] |
註解掉之後,然後我們再來重新提交資料,pycharm列印出如下:
3.request物件方法
3.1 request.method
- 取得當前請求的請求方法並且結果是一個純大寫的字串型別
範例:取得當前請求方法
view.py檔案
1 2 3 4 5 6 7 8 | from django.shortcuts import render # Create your views here. def login(requset): print(requset.method, type(requset.method)) # 取得當前請求資料的方法,並且結果是一個純大寫的字串型別 # 回傳給瀏覽器一個登入頁面 return render(requset, 'login.html') |
然後在瀏覽器提交表單
pycharm顯示如下,然後就可以取得到當前的請求方法:
通常呢,我們使用get請求回傳一個頁面,而post情求取得使用者訊息,資料校驗等一些複雜的操作,那我們在這裡如何實現呢?
簡單,只需要寫個if判斷即可。
view.py檔案
1 2 3 4 5 6 7 8 9 10 11 12 | from django.shortcuts import render, HttpResponse # Create your views here. def login(requset): # print(requset.method, type(requset.method)) # 取得當前請求資料的方法,並且結果是一個純大寫的字串型別 <class 'str'> if requset.method == "GET": # 回傳給瀏覽器一個登入頁面 return render(requset, 'login.html') elif requset.method == "POST": # POST 請求提交資料 return HttpResponse("好好學習,天天向上!") |
然後使用POST請求向後端提交資料,而使用GET請求就會回傳一個頁面。
但是,你有沒有發現這樣寫的話後面程式碼寫多了就會使層級變得複雜。
因為檢視表函式預設就是用來處理get請求的,所以我們將程式碼精簡如下:
檢視表函式固定格式:
1 2 3 4 5 6 7 8 | from django.shortcuts import render, HttpResponse,redirect # Create your views here. def login(requset): if requset.method == "POST": # POST 請求提交資料 return HttpResponse("好好學習,天天向上!") return render(requset, "login.html") # 如果是get請求回傳給瀏覽器一個登入頁面 |
解決了上面問題,那麼我們怎麼去取得使用者請求資料呢?
首先我們開啟中斷點除錯,然後在瀏覽器提交資料,就可以看到我們剛剛提交的資料了。
任意一個出現request物件出現的行加上斷電除錯,然後DEBUG模式執行,可以取得到request物件的方法
3.2 request.POST
- 取得使用者提交的POST請求資料(不包含檔案)
- 資料型態:回傳的是一個字典型別
views.py檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from django.shortcuts import render, HttpResponse, redirect # Create your views here. def login(requset): ''' get 情請求和post情求應該有不同的處理機制 :param requset:請求相關的資料物件,裡面有很多簡易的方法 :return: ''' if requset.method == "POST": # POST 請求提交資料 print(requset.POST) # 取得使用者提交的POST請求 (不包含檔案) #<QueryDict: {'username': ['1314'], 'password': ['1414']}> return HttpResponse("好好學習,天天向上!") return render(requset, "login.html") # 如果是get請求回傳給瀏覽器一個登入頁面 |
瀏覽器提交資料,pycharm列印如下:
然後我們再來取得使用者名稱,看看它到底是什麼資料型態。
requset.POST.get
- get方法會取得串列最後一個元素
我們在views.py檔案加入get方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from django.shortcuts import render, HttpResponse, redirect # Create your views here. def login(requset): ''' get 情請求和post情求應該有不同的處理機制 :param requset:請求相關的資料物件,裡面有很多簡易的方法 :return: ''' if requset.method == "POST": # POST 請求提交資料 print(requset.POST) # 取得使用者提交的POST請求 (不包含檔案) # <QueryDict: {'username': ['1314'], 'password': ['1414']}> username = requset.POST.get("username") # get方法會只會得到串列最後一個元素 print(username, type(username)) # 1314 <class 'str'> return HttpResponse("好好學習,天天向上!") return render(requset, "login.html") # 如果是get請求回傳給瀏覽器一個登入頁面 |
提交資料後,得到一個字串的資料型態。
而且,**get方法會取得串列最後一個元素,**不信,我們來驗證一下:
在login.html檔案中多新增一個使用者名稱。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登入介面</title> {<!-- -->% load static %} {<!-- -->#模板語法,類似於導模組#} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}"> <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script> </head> <body> <div class="container"> <div class="row"> <h1 class="text-center">登入</h1> <div class="col-md-8 col-md-offset-2"> <form action="login.html " method="post"> username: <input type="text" name="username" class="form-control"> <input type="text" name="username" class="form-control"> password: <input type="password" name="password" class="form-control"> <input type="submit" class="btn btn-success btn-block"> </form> </div> </div> </div> </body> </html> |
然後前端提交不同的兩個使用者名稱,如下:
然後得到串列最後一個元素。
問題又來了,如果取得使用者的愛好呢?使用者的愛好是可以有多個的那麼怎麼樣去取得呢?
login.html檔案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登入介面</title> {<!-- -->% load static %} {<!-- -->#模板語法,類似於導模組#} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}"> <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script> </head> <body> <div class="container"> <div class="row"> <h1 class="text-center">登入</h1> <div class="col-md-8 col-md-offset-2"> <form action="login.html " method="post"> username: <input type="text" name="username" class="form-control"> username: <input type="text" name="username" class="form-control"> password: <input type="password" name="password" class="form-control"> <input type="submit" class="btn btn-success btn-block"> <p> <input type="checkbox" name="hobby" value="bas">籃球 <input type="checkbox" name="hobby" value="foot">足球 <input type="checkbox" name="hobby" value="study">學習 </p> </form> </div> </div> </div> </body> </html> |
request.POST.getlist
- 取得整個串列
views.py檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | from django.shortcuts import render, HttpResponse, redirect # Create your views here. def login(requset): ''' get 情請求和post情求應該有不同的處理機制 :param requset:請求相關的資料物件,裡面有很多簡易的方法 :return: ''' if requset.method == "POST": # POST 請求提交資料 print(requset.POST) # 取得使用者提交的POST請求 (不包含檔案) # <QueryDict: {'username': ['1314'], 'password': ['1414']}> username = requset.POST.get("username") passwd =requset.POST.get("password") print(username, type(username)) # 1314 <class 'str'> hobby =requset.POST.getlist('hobby') # 取得整個串列 print(username,passwd,hobby) return HttpResponse("好好學習,天天向上!") return render(requset, "login.html") # 如果是get請求回傳給瀏覽器一個登入頁面 |
前端提交資料,然後後端取得到的資料如下:
3.3 request.GET
-
取得url問號後面的資料
-
資料型態:回傳的是一個字典型別
views.py檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | from django.shortcuts import render, HttpResponse, redirect # Create your views here. def login(requset): ''' get請求和post情求應該有不同的處理機制 :param requset:請求相關的資料物件,裡面有很多簡易的方法 :return: ''' if requset.method == "POST": # POST 請求提交資料 print(requset.POST) # 取得使用者提交的POST請求 (不包含檔案) # <QueryDict: {'username': ['1314'], 'password': ['1414']}> username = requset.POST.get("username") passwd =requset.POST.get("password") print(username, type(username)) # 1314 <class 'str'> hobby =requset.POST.getlist('hobby') # 取得整個串列 print(username,passwd,hobby) return HttpResponse("好好學習,天天向上!") print(requset.GET) # <QueryDict: {'username': ['lili'], 'password': ['123']}> return render(requset, "login.html") # 如果是get請求回傳給瀏覽器一個登入頁面 |
前端提交url
後端回傳資料:
它和POST一樣都有兩個方法:
request.GET.get
- get方法會取得串列最後一個元素
request.GET.getlist
- 取得到整個串列
views.py檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | from django.shortcuts import render, HttpResponse, redirect # Create your views here. def login(requset): ''' get 情請求和post情求應該有不同的處理機制 :param requset:請求相關的資料物件,裡面有很多簡易的方法 :return: ''' if requset.method == "POST": # POST 請求提交資料 print(requset.POST) # 取得使用者提交的POST請求 (不包含檔案) # <QueryDict: {'username': ['1314'], 'password': ['1414']}> username = requset.POST.get("username") passwd =requset.POST.get("password") print(username, type(username)) # 1314 <class 'str'> hobby =requset.POST.getlist('hobby') # 取得整個串列 print(username,passwd,hobby) return HttpResponse("好好學習,天天向上!") print(requset.GET) print(requset.GET.get('username')) print(requset.GET.getlist('hobby')) return render(requset, "login.html") # 如果是get請求回傳給瀏覽器一個登入頁面 |
前端提交url
後端輸出資料如下:
接下來我盟再來看看如何取得檔案。
3.4 request.FILES
- 取得使用者上傳的檔案資料
- 直接看成是字典即可
request.FILES.get
- 取得串列最後一個元素
request.FILES.getlist
- 取得整個串列
login.html檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登入介面</title> {<!-- -->% load static %} {<!-- -->#模板語法,類似於導模組#} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}"> <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script> </head> <body> <div class="container"> <div class="row"> <h1 class="text-center">登入</h1> <div class="col-md-8 col-md-offset-2"> <form action="login.html " method="post"> username: <input type="text" name="username" class="form-control"> username: <input type="text" name="username" class="form-control"> password: <input type="password" name="password" class="form-control"> <input type="submit" class="btn btn-success btn-block"> <p> <input type="checkbox" name="hobby" value="bas">籃球 <input type="checkbox" name="hobby" value="foot">足球 <input type="checkbox" name="hobby" value="study">學習 </p> <p> <input type="file" name="myfile"> </p> </form> </div> </div> </div> </body> </html> |
views.py檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from django.shortcuts import render, HttpResponse, redirect # Create your views here. def login(requset): ''' get 情請求和post情求應該有不同的處理機制 :param requset:請求相關的資料物件,裡面有很多簡易的方法 :return: ''' if requset.method == "POST": # POST 請求提交資料 print(requset.POST) # 取得使用者提交的POST請求 (不包含檔案) return HttpResponse("好好學習,天天向上!") return render(requset, "login.html") # 如果是get請求回傳給瀏覽器一個登入頁面 |
前端提交資料
後端輸出如下:
並沒有拿到我們需要的檔案物件。
這是因為:針對檔案資料,不能使用request.POST取得,該方法只能取得到檔名。
然後我們使用requset.FILES方法取得檔案物件
views.py檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from django.shortcuts import render, HttpResponse, redirect # Create your views here. def login(requset): ''' get 情請求和post情求應該有不同的處理機制 :param requset:請求相關的資料物件,裡面有很多簡易的方法 :return: ''' if requset.method == "POST": # POST 請求提交資料 print(requset.POST) # 取得使用者提交的POST請求 (不包含檔案) # 針對檔案資料,不能使用request.POST取得,該方法只能取得到檔名。 print(requset.FILES) return HttpResponse("好好學習,天天向上!") return render(requset, "login.html") # 如果是get請求回傳給瀏覽器一個登入頁面 |
效果如下:
注意: form表單如果需要攜帶檔案資料 那麼要新增引數 :
login.html檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登入介面</title> {<!-- -->% load static %} {<!-- -->#模板語法,類似於導模組#} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}"> <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script> </head> <body> <div class="container"> <div class="row"> <h1 class="text-center">登入</h1> <div class="col-md-8 col-md-offset-2"> <form action="login.html" method="post" enctype="multipart/form-data"> username: <input type="text" name="username" class="form-control"> username: <input type="text" name="username" class="form-control"> password: <input type="password" name="password" class="form-control"> <input type="submit" class="btn btn-success btn-block"> <p> <input type="checkbox" name="hobby" value="bas">籃球 <input type="checkbox" name="hobby" value="foot">足球 <input type="checkbox" name="hobby" value="study">學習 </p> <p> <input type="file" name="myfile"> </p> </form> </div> </div> </div> </body> </html> |
效果展示如下:
三、總結
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 1.form表單回顧 form表單預設使用的是get請求 action 控制後端提交的路徑 1.不寫:預設朝當前頁面地址提交資料 2.後序:/index/ 3.全寫:https://www.mzitu.com method get post 2.request物件方法 request.method 取得當前請求的請求方法並且結果是一個純大寫的字串型別 request.POST # 直接看成是字典即可 取得使用者提交post請求過來的基本資料(不包含檔案) get() # 取得串列最後一個元素 getlist() # 取得整個串列 request.GET # 直接看成是字典即可 取得url問號後面的資料 get() # 取得串列最後一個元素 getlist() # 取得整個串列 request.FILES # 直接看成是字典即可 取得使用者上傳的檔案資料 ''' form表單如果需要攜帶檔案資料 那麼要新增引數 <form action="login.html" method="post" enctype="multipart/form-data"> ''' get() # 取得串列最後一個元素 getlist() # 取得整個串列 """ 檢視表函式書寫格式 def login(request): if request.method == 'POST': return HttpResponse("好好學習,天天向上") return render(request,'login.html') """ |