python?flask框架中多種查詢參數(shù)的獲取方式
flask的生命周期
整個(gè)htpp請(qǐng)求在flask框架中的流程如下:
客戶端—>wsgi應(yīng)用程序->全局鉤子–> 路由 --> 視圖 --> 路由—> 全局鉤子 —> wsgi應(yīng)用程序—> 客戶端

request請(qǐng)求對(duì)象
文檔: https://flask.palletsprojects.com/en/2.0.x/api/#flask.Request
- request:flask中代表當(dāng)前請(qǐng)求的 request 對(duì)象
- 作用:在視圖函數(shù)中取出本次客戶端的請(qǐng)求數(shù)據(jù)
- 導(dǎo)入:from flask import request
- 源代碼位置:
- 代理類 from flask.app import Request —> from flask.globals.Request
- 源碼類:from flask.wrappers.Request
- 基類:from werkzeug.wrappers import Request as RequestBase
request,常用的屬性如下:
注意,request對(duì)象要在視圖函數(shù)里面使用

獲取請(qǐng)求中各項(xiàng)數(shù)據(jù)
from flask import Flask, request
# 項(xiàng)目實(shí)例應(yīng)用對(duì)象
app = Flask(__name__)
# 加載配置
app.config.update({
"DEBUG": True
})
# 在http的常用請(qǐng)求方法中,delete和get是沒(méi)有請(qǐng)求體的?。?!
@app.route(rule="/")
def index():
"""獲取請(qǐng)求體"""
print(request)
return 'hello flask'
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000)
瀏覽器訪問(wèn),終端打印request對(duì)象

單個(gè)參數(shù)值獲取
url中每個(gè)查詢參數(shù)只有一個(gè)值的情況:
from flask import Flask, request
# 項(xiàng)目實(shí)例應(yīng)用對(duì)象
app = Flask(__name__)
# 加載配置
app.config.update({
"DEBUG": True
})
# 在http的常用請(qǐng)求方法中,delete和get是沒(méi)有請(qǐng)求體的?。?!
@app.route(rule="/qs")
def index():
"""
獲取客戶端請(qǐng)求的查詢字符串參數(shù)
:return:
"""
"""
請(qǐng)求url:http://127.0.0.1:5000/qs?user=xiaoming&age=16
"""
# 獲取原始的查詢字符串參數(shù),格式:bytes
print(request.query_string)
# b'user=xiaoming&age=16'
# # 針對(duì)原始的查詢字符串參數(shù),轉(zhuǎn)換成字典格式
# query_string = parse_qs(request.query_string.decode())
# print(query_string) # {'user': ['xiaoming'], 'age': ['16']}
# # 獲取參數(shù)值
# print(query_string["user"][0])
# # 獲取查詢字符串參數(shù),格式:ImmutableMultiDict
# print(request.args)
# # ImmutableMultiDict([('user', 'xiaoming'), ('age', '16')])
# # 獲取單個(gè)參數(shù)值
# print(request.args["user"])
# print(request.args["age"])
# print(request.args.get("age"))
# """
# 請(qǐng)求url:http://127.0.0.1:5000/qs?user=xiaoming&fav=shopping&fav=coding&fav=rap
# """
# # print(request.args["user"]) # 'xiaoming'
# # print(request.args["fav"]) # 'shopping'
# # print(request.args.get("user")) # 'xiaoming'
#
# print(request.args.getlist("fav")) # ['shopping', 'coding', 'rap']
#
return "hello, flask"
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000)
瀏覽器請(qǐng)求:

request.query_string 查詢參數(shù),是byte類型數(shù)據(jù)

針對(duì)原始的查詢字符串參數(shù),默認(rèn)是byte類型,我們可以將其轉(zhuǎn)換成字典格式
需要導(dǎo)包:
from urllib.parse import parse_qs
# # 針對(duì)原始的查詢字符串參數(shù),轉(zhuǎn)換成字典格式
query_string = parse_qs(request.query_string.decode())
print(query_string) # {'user': ['xiaoming'], 'age': ['16']}
注意,得到的字典值是列表類型

# # 獲取參數(shù)值 print(query_string["user"][0])

request.args是ImmutableMultiDict類型數(shù)據(jù)

# # 獲取單個(gè)參數(shù)值
print(request.args["user"])
print(request.args["age"])
print(request.args.get("age"))

多個(gè)參數(shù)值獲取
url中查詢參數(shù)有多個(gè)值的情況:
#多個(gè)參數(shù)值獲取
# """
# 請(qǐng)求url:http://127.0.0.1:5000/qs?user=xiaoming&fav=shopping&fav=coding&fav=rap
# """
print(request.args)
print(request.args["user"]) # 'xiaoming'
#通過(guò)字典鍵的方式獲取多參數(shù)值,只能獲取第一個(gè)
print(request.args["fav"]) # 'shopping'
print(request.args.get("user")) # 'xiaoming'
#使用getlist()方式,可以獲取全部
print(request.args.getlist("fav")) # ['shopping', 'coding', 'rap']
瀏覽器請(qǐng)求:

終端打印

完整獲取查詢參數(shù)代碼
from flask import Flask, request
from urllib.parse import parse_qs
# 項(xiàng)目實(shí)例應(yīng)用對(duì)象
app = Flask(__name__)
# 加載配置
app.config.update({
"DEBUG": True
})
# 在http的常用請(qǐng)求方法中,delete和get是沒(méi)有請(qǐng)求體的?。?!
@app.route(rule="/qs")
def index():
"""
獲取客戶端請(qǐng)求的查詢字符串參數(shù)
:return:
"""
"""
請(qǐng)求url:http://127.0.0.1:5000/qs?user=xiaoming&age=16
"""
# 獲取原始的查詢字符串參數(shù),格式:bytes
# print(request.query_string)
# b'user=xiaoming&age=16'
# 獲取查詢字符串參數(shù),格式:ImmutableMultiDict
# print(request.args)
# # 針對(duì)原始的查詢字符串參數(shù),轉(zhuǎn)換成字典格式
# query_string = parse_qs(request.query_string.decode())
# print(query_string) # {'user': ['xiaoming'], 'age': ['16']}
# # 獲取參數(shù)值
# print(query_string["user"][0])
# # 獲取查詢字符串參數(shù),格式:ImmutableMultiDict
# print(request.args)
# # ImmutableMultiDict([('user', 'xiaoming'), ('age', '16')])
# # 獲取單個(gè)參數(shù)值
# print(request.args["user"])
# print(request.args["age"])
# print(request.args.get("age"))
#多個(gè)參數(shù)值獲取
# """
# 請(qǐng)求url:http://127.0.0.1:5000/qs?user=xiaoming&fav=shopping&fav=coding&fav=rap
# """
print(request.args)
print(request.args["user"]) # 'xiaoming'
#通過(guò)字典鍵的方式獲取多參數(shù)值,只能獲取第一個(gè)
print(request.args["fav"]) # 'shopping'
print(request.args.get("user")) # 'xiaoming'
#使用getlist()方式,可以獲取全部
print(request.args.getlist("fav")) # ['shopping', 'coding', 'rap']
return "hello, flask"
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000)
總結(jié):以上就是python flask框架中多種查詢參數(shù)的獲取方式的詳細(xì)內(nèi)容,更多關(guān)于python flask查詢參數(shù)獲取的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
DataFrame窗口函數(shù)rolling()的用法
這篇文章主要介紹了DataFrame窗口函數(shù)rolling()的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
Python中多繼承與菱形繼承問(wèn)題的解決方案與實(shí)踐
在Python這個(gè)靈活且功能強(qiáng)大的編程語(yǔ)言中,多繼承是一個(gè)既強(qiáng)大又復(fù)雜的概念,它允許一個(gè)類繼承自多個(gè)父類,從而能夠復(fù)用多個(gè)父類的屬性和方法,本文將深入解釋Python中的多繼承概念,詳細(xì)剖析菱形繼承問(wèn)題,并探討Python是如何解決這一難題的,需要的朋友可以參考下2024-07-07
對(duì)Python中DataFrame選擇某列值為XX的行實(shí)例詳解
今天小編就為大家分享一篇對(duì)Python中DataFrame選擇某列值為XX的行實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Django中和時(shí)區(qū)相關(guān)的安全問(wèn)題詳解
這篇文章主要給大家介紹了關(guān)于Django中和時(shí)區(qū)相關(guān)的安全問(wèn)題的相關(guān)資料,需要的朋友可以參考下2020-10-10
在jupyter notebook中使用pytorch的方法
這篇文章主要介紹了在jupyter notebook中使用pytorch的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
Python3自定義http/https請(qǐng)求攔截mitmproxy腳本實(shí)例
這篇文章主要介紹了Python3自定義http/https請(qǐng)求攔截mitmproxy腳本實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05

