最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python flask框架請求體數(shù)據(jù)、文件上傳、請求頭信息獲取方式詳解

 更新時間:2024年03月20日 10:12:03   作者:景天科技苑  
這篇文章主要介紹了Python flask框架請求體數(shù)據(jù)、文件上傳、請求頭信息獲取方式詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

獲取請求體數(shù)據(jù)

與Django不同的是,flask是不需要將request對象作為第一個參數(shù)傳入視圖函數(shù),他的request對象是來自于flask,是一個請求上下文對象(全局變量 --> 線程局部變量,使用起來就像線程全局變量一樣,具有較高的隔離性),我們只需導(dǎo)入即可使用,request對象中保存了一次HTTP請求的一切信息。

1.獲取表單數(shù)據(jù)(不包含上傳文件)

視圖函數(shù)

@app.route("/form", methods=["get","post"])
def form():
    """
    獲取客戶端請求的請求體[表單]
    # :return:
    """
    """
    獲取表單數(shù)據(jù)
    請求url:
    """
    """獲取表單數(shù)據(jù)[不包含上傳文件]"""
    print(request.form)
    # # ImmutableMultiDict([('username', 'root'), ('password', '123456'), ('fav', 'swimming'), ('fav', 'watch TV')])
    # # 獲取表單項數(shù)據(jù)[單個值]
    print(request.form.get("username")) # root
    print(request.form.get('pwd'))
    # # 獲取表單項數(shù)據(jù)[多個值]
    print(request.form.getlist("fav"))  # ['swimming', 'watch TV']
    return "hello, jingtian flask"

postman請求
非文件上傳類post請求,使用x-www-form-urlencoded類型表單數(shù)據(jù)

看下終端打印

2.獲取表單數(shù)據(jù)(包含文件上傳)

視圖函數(shù)

@app.route("/form", methods=["get","post"])
def form():
    """
    獲取客戶端請求的請求體[表單]
    # :return:
    """
    """
    獲取表單數(shù)據(jù)
    請求url:
    """
    """獲取表單數(shù)據(jù)的上傳文件"""
    print(request.form.get("username"))
    # # 獲取所有上傳文件
    # print(request.files)  # ImmutableMultiDict([('avatar', <FileStorage: 's.png' ('image/png')>)])
    # # 根據(jù)name值獲取單個上傳文件
    print(request.files.get("avatar"))  # <FileStorage: 's.png' ('image/png')>
    # # 根據(jù)name值獲取多個上傳文件
    print(request.files.getlist("avatar"))  # [<FileStorage: 'a.png' ('image/png')>, <FileStorage: 's.png' ('image/png')>]
    return "hello, jingtian flask"

postman請求
非文件上傳類post請求,使用form-data類型表單數(shù)據(jù)
postman上傳文件,數(shù)據(jù)類型選File

選擇上傳文件

發(fā)送請求

看下終端打印

上傳多個文件,postman同時選中多個文件

終端打印,使用getlist可以獲取到多個文件對象

3.獲取客戶端ajax請求數(shù)據(jù)

ajax請求數(shù)據(jù),在請求頭處的Content-type是 application/json
body里面上柴男raw json數(shù)據(jù)

Headers里面的Content-type

視圖函數(shù)

@app.route("/data", methods=["post"])
def data():
    """
    獲取客戶端請求的請求體[ajax]
    :return:
    """
    """判斷本次客戶端是否是ajax請求獲取本次客戶端提交的數(shù)據(jù)格式是否是json"""
    print(request.is_json)
    """獲取客戶端請求體中的json數(shù)據(jù),要確保發(fā)送的是json數(shù)據(jù)才能獲取到"""
    print(request.json)  # {'username': 'jingtian', 'password': '123456'}
    """獲取客戶端請求體的原始數(shù)據(jù),得到的是byte類型數(shù)據(jù)"""
    print(request.data)  # b'{\r\n  "username": "root",\r\n  "password": "123456"\r\n}'
    # 原始數(shù)據(jù)轉(zhuǎn)json格式,通過json.loads()
    print(json.loads(request.data))  # {'username': 'root', 'password': '123456'}
    """接收其他格式類型的數(shù)據(jù)"""
    print(request.data)
    return "hello, flask"

發(fā)送json類型數(shù)據(jù)post請求

終端打印

獲取其他類型數(shù)據(jù),直接使用request.data
上傳xml格式數(shù)據(jù),就不能在用request.json()獲取了,否則報錯

"""接收其他格式類型的數(shù)據(jù),使用request.data"""
print(request.data)

終端打印

4.上傳的文件保存到本地

視圖函數(shù)

#上傳文件的保存
@app.route("/file", methods=["post", "put", "patch"])
def file():
    """
    接收上傳文件并保存文件
    :return:
    """
    #得到的是FileStorage對象
    avatar = request.files.get("avatar")
    print(avatar)
    # 調(diào)用FileStorage提供的save方法就可以保存文件了,dst指定保存文件路徑
    avatar.save(dst="./jingtian.png")
    return "hello, flask"

使用postman文件上傳

發(fā)送請求

本地查看,已保存到本地

多文件保存類似,無外乎加個循環(huán)而已,感興趣的小伙伴可以試試,有疑問可以私信我哦

獲取請求頭數(shù)據(jù)

1.獲取請求頭所有信息

request.headers

請求:

終端打印請求頭

2.獲取單個請求頭信息

#基于get使用請求頭原始屬性名獲取, User-Agent 客戶端的網(wǎng)絡(luò)代理工具名稱

request.headers.get("User-Agent")

3.把原始屬性名轉(zhuǎn)換成小寫下劃線格式來獲取

request.user_agent

#獲取Accept

request.accept_mimetypes

#獲取本次客戶端請求的服務(wù)端地址

request.host

#獲取本次客戶端請求提交的數(shù)據(jù)格式

request.content_type

請求

終端打印

#獲取本次客戶端請求的uri路徑

request.path

#獲取本次客戶端請求完整url地址

request.url

#獲取本次客戶端請求的服務(wù)端域名

request.root_url

#獲取本次客戶端的Http請求方法或請求動作

request.method

#獲取本次客戶端的IP地址

request.remote_addr

#獲取本次客戶端獲取到的服務(wù)端信息

request.server

得到的是包含兩個元素的元祖,第一個元素是服務(wù)端允許訪問的ip地址,第二個是服務(wù)端口號

#獲取本次客戶端請求時,服務(wù)端的系統(tǒng)系統(tǒng)環(huán)境變量信息

request.environ

獲取的全部數(shù)據(jù)如下:

{'wsgi.version': (1, 0), 'wsgi.url_scheme': 'http', 'wsgi.input': <_io.BufferedReader name=416>, 'wsgi.errors': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>, 'wsgi.multithread': True, 'wsgi.multiprocess': False, 'wsgi.run_once': False, 'werkzeug.socket': <socket.socket fd=416, family=2, type=1, proto=0, laddr=('127.0.0.1', 5000), raddr=('127.0.0.1', 12712)>, 'SERVER_SOFTWARE': 'Werkzeug/3.0.1', 'REQUEST_METHOD': 'POST', 'SCRIPT_NAME': '', 'PATH_INFO': '/header', 'QUERY_STRING': '', 'REQUEST_URI': '/header', 'RAW_URI': '/header', 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_PORT': 12712, 'SERVER_NAME': '0.0.0.0', 'SERVER_PORT': '5000', 'SERVER_PROTOCOL': 'HTTP/1.1', 'HTTP_USER_AGENT': 'PostmanRuntime/7.37.0', 'HTTP_ACCEPT': '*/*', 'HTTP_POSTMAN_TOKEN': '3571e769-9ecf-44c1-bad0-5487c684f9eb', 'HTTP_HOST': '127.0.0.1:5000', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate, br', 'HTTP_CONNECTION': 'keep-alive', 'CONTENT_TYPE': 'multipart/form-data; boundary=--------------------------480267896765648122071509', 'CONTENT_LENGTH': '10720', 'werkzeug.request': <Request 'http://127.0.0.1:5000/header' [POST]>, 'werkzeug.debug.preserve_context': <built-in method append of list object at 0x00000202732AD900>}

自定義請求頭信息獲取
#根據(jù)自定義的請求頭的鍵來獲取

request.headers.get("company")

發(fā)送請求

獲取自定義請求頭

完整代碼解析

import json
from flask import Flask, request
app = Flask(__name__)
@app.route("/header", methods=["get", "post", "put", "patch","delete"])
def header():
    """
    獲取請求頭等其他請求信息
    :return:
    """
    # # 獲取請求頭所有信息
    # print(request.headers, type(request.headers))
    #
    # """
    # 獲取單個請求頭信息
    # """
    # # 基于get使用請求頭原始屬性名獲取, User-Agent 客戶端的網(wǎng)絡(luò)代理工具名稱
    # print(request.headers.get("User-Agent"))  # PostmanRuntime/7.26.10
    # # 把原始屬性名轉(zhuǎn)換成小寫下劃線格式來獲取
    # print(request.user_agent)   # PostmanRuntime/7.26.10
    #
    # # 獲取本次客戶端請求的服務(wù)端地址
    # print(request.host)  # 127.0.0.1:5000
    #
    # # 獲取本次客戶端請求提交的數(shù)據(jù)格式
    # print(request.content_type)  # multipart/form-data;
    #
    # # 獲取本次客戶端請求的uri路徑
    # print(request.path)  # /header
    # # 獲取本次客戶端請求完整url地址
    # print(request.url)   # http://127.0.0.1:5000/header
    # # 獲取本次客戶端請求的服務(wù)端域名
    # print(request.root_url)  # http://127.0.0.1:5000/
    #
    # # 獲取本次客戶端的Http請求方法或請求動作
    # print(request.method)  # POST
    #
    # # 獲取本次客戶端的IP地址
    # print(request.remote_addr)  # 127.0.0.1
    #
    # # 獲取本次客戶端獲取到的服務(wù)端信息
    # print(request.server)  # ('0.0.0.0', 5000)
    # 獲取本次客戶端請求時,服務(wù)端的系統(tǒng)系統(tǒng)環(huán)境變量信息
    # print(request.environ)
    """
    獲取自定義請求頭
    """
    print(request.headers.get("company"))  # flask.edu
    return "hello, flask"
if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)

總結(jié):如上就是flask框中,請求體數(shù)據(jù)的獲取方式,文件上傳保存,請求頭數(shù)據(jù)獲取,自定義請求頭等詳細使用方法,持續(xù)更新中?。?!

到此這篇關(guān)于Python flask框架請求體數(shù)據(jù)、文件上傳、請求頭信息獲取方式的文章就介紹到這了,更多相關(guān)Python flask請求體數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

宣恩县| 凭祥市| 湄潭县| 江口县| 武穴市| 黑龙江省| 安阳市| 广宗县| 张家界市| 逊克县| 宁明县| 宣化县| 永安市| 台北县| 德兴市| 定南县| 靖州| 襄汾县| 两当县| 大兴区| 杭州市| 鲁山县| 高唐县| 公安县| 襄樊市| 云和县| 青冈县| 盐山县| 长海县| 城市| 永宁县| 三都| 乳源| 陇南市| 蓬莱市| 海宁市| 盖州市| 彝良县| 蕲春县| 海原县| 朝阳市|