Flask之request


導入:

from flask import request

 

request的一些常見參數

form
一個包含解析過的從 POST 或 PUT 請求發送的表單對象的 MultiDict 。請注意上傳的文件不會在這里,而是在 files 屬性中。

args
一個包含解析過的查詢字符串( URL 中問號后的部分)內容的 MultiDict 。

values
一個包含 form 和 args 全部內容的 CombinedMultiDict 。

cookies
一個包含請求中傳送的所有 cookie 內容的 dict 。

stream
如果表單提交的數據沒有以已知的 mimetype 編碼,為性能考慮,數據會不經修改存儲在這個流中。大多數情況下,使用可以把數據提供為字符串的 data 是更好的方法。流只返回一次數據。

headers 進入請求的標頭存為一個類似字典的對象。

data
如果進入的請求數據是 Flask 不能處理的 mimetype ,數據將作為字符串存於此。

files
一個包含 POST 和 PUT 請求中上傳的文件的 MultiDict 。每個文件存儲為 FileStorage 對象。
其基本的行為類似你在 Python 中見到的標准文件對象,差異在於這個對象有一個 save() 方法可以把文件存儲到文件系統上。 environ 底層的 WSGI 環境。 method 當前請求的 HTTP 方法 (POST , GET 等等) path script_root url base_url url_root 提供不同的方式來審視當前的 URL 。想象你的應用監聽下面的 URL: http:
//www.example.com/myapplication 並且用戶請求下面的 URL: http://www.example.com/myapplication/page.html?x=y 這個情況下,上面提到的屬性的值會為如下: path /page.html script_root /myapplication base_url http://www.example.com/myapplication/page.html url http://www.example.com/myapplication/page.html?x=y url_root http://www.example.com/myapplication/

 

 

1.request.method 之 肯定知道前端用什么方式提交的

Flask 的 request 中給我們提供了一個 method 屬性里面保存的就是前端的請求的方式

print(request.method) # POST 看來可以使用這種方式來驗證請求方式了

2.request.form 之 拿他來舉例的話再好不過了

Form表單中傳遞過來的值 使用 request.form 中拿到

    print(request.form)  # ImmutableMultiDict([('user', 'Oldboy'), ('pwd', 'DragonFire')])
    # ImmutableMultiDict 它看起來像是的Dict 就用Dict的方法取值試一下吧
    print(request.form["user"])  # Oldboy
    print(request.form.get("pwd"))  # DragonFire
    # 看來全部才對了, ImmutableMultiDict 似乎就是個字典,再來玩一玩它
    print(list(request.form.keys()))  # ['user', 'pwd'] 看來是又才對了
    #如果以上所有的方法你都覺得用的不爽的話
    req_dict = dict(request.form)
    print(req_dict)  # 如果你覺得用字典更爽的話,也可以轉成字典操作(這里有坑) 

3.request.args 之 你能看見的Url參數全在里面

request.args 中保存的是url中傳遞的參數

先把后端請求代碼改動一下:

然后使用URL地址直接傳遞參數

然后會在控制台中看到 ImmutableMultiDict([('id', '1'), ('age', '20')])

哎呀我去,這不是和剛才一樣嗎? 是的!

    print(request.args)  # ImmutableMultiDict([('id', '1'), ('age', '20')])
    print(request.args["id"])  # 1
    print(request.args.get("age"))  # 20
    print(list(request.args.keys()))  # ['id', 'age']
    print(list(request.args.values()))  # ['1', '20']
    req_dict = dict(request.args)  # {'id': ['1'], 'age': ['20']}
    print(req_dict)

request.args 與 request.form 的區別就是:

request.args 是獲取url中的參數

request.form 是獲取form表單中的參數

 

4.request.values 之 只要是個參數我都要

改動一下前端代碼:

這是讓我們在使用form表單提交的同時使用url參數提交

print(request.values)  
# CombinedMultiDict([ImmutableMultiDict([('id', '1'), ('age', '20')]), ImmutableMultiDict([('user', 'Oldboy'), ('pwd', 'DragonFire')])]) print(request.values.get("id")) # 1 print(request.values["user"]) # Oldboy # 這回喜歡直接操作字典的小伙伴們有驚喜了! to_dict() 方法可以直接將我們的參數全部轉為字典形式 print(request.values.to_dict()) # {'user': 'Oldboy', 'pwd': 'DragonFire', 'id': '1', 'age': '20'}

注意啦!注意啦!

# 注意這里的坑來啦! 坑來啦!
# 如果url和form中的Key重名的話,form中的同名的key中value會被url中的value覆蓋
# http://127.0.0.1:5000/req?id=1&user=20
print(request.values.to_dict())  # {'user': 20 'pwd': 'DragonFire', 'id': '1'}

 

5.request.cookies 之 存在瀏覽器端的字符串兒也會一起帶過來

前提是你要開啟瀏覽器的 cookies

request.cookies 是將cookies中信息讀取出來

 

6.request.headres 之 請求頭中的秘密

用來獲取本次請求的請求頭

    print(type(request.headers))
    """
    Host: 127.0.0.1:5000
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Referer: http://127.0.0.1:5000/home
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 26
    Cookie: csrftoken=vDIozqveCEfArdYXlM6goHVlSQEn7h4bDygNphL2Feas60DiM2di0jlqKfxo7xhA
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    Cache-Control: max-age=0
    """

 

7.request.data 之 如果處理不了的就變成字符串兒存在data里面

你一定要知道 request 是基於 mimetype 進行處理的

mimetype的類型 以及 字符串兒 : http://www.w3school.com.cn/media/media_mimeref.asp

如果不屬於上述類型的描述,request就會將無法處理的參數轉為Json存入到 data 中

其實我們可以將 request.data , json.loads 同樣可以拿到里面的參數

 

8.request.files 之 給我一個文件我幫你保管

如果遇到文件上傳的話,request.files 里面存的是你上傳的文件,但是 Flask 在這個文件的操作中加了一定的封裝,讓操作變得極為簡單

首先改下前端代碼:

后端這樣寫

    print(request.files)  # ImmutableMultiDict([('file', <FileStorage: 'DragonFire.txt' ('text/plain')>)])
    print(request.files["file"])  # <FileStorage: 'DragonFire.txt' ('text/plain')>
    my_file = request.files["file"]
    my_file.save("OldBoyEDU.txt")  # 保存文件,里面可以寫完整路徑+文件名

這樣我們就成功的保存了一個名叫 "OldBoyEDU.txt" 的文件了,操作還是很簡單的

 

9. request.獲取各種路徑 之 這些方法沒必要記,但是要知道它存在

    # 獲取當前的url路徑
    print(request.path)# /req
    # 當前url路徑的上一級路徑
    print(request.script_root) #
    # 當前url的全部路徑
    print(request.url) # http://127.0.0.1:5000/req
    # 當前url的路徑的上一級全部路徑
    print(request.url_root ) # http://127.0.0.1:5000/

 

10. request.json 之 前提你得告訴是json

如果在請求中寫入了 "application/json" 使用 request.json 則返回json解析數據, 否則返回 None

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM