Flask 使用 request 處理GET POST請求、上傳文件

在Django框架開發中,request對象就是用來處理GET\POST請求的關鍵對象,而Flask框架也是同樣的。json

下面來看看request對象的經常使用方法。flask

request對象的經常使用方法

request對象的導入:bash

from flask import request
複製代碼

Flask 框架中的 request 對象保存了一次HTTP請求的一切信息。那麼這個HTTP請求中可能會是GET\POST請求,以及還要考慮如何獲取各類請求體或者URL參數。app

而對應着這些參數的獲取或者GET/POST方法的區分,下面都有對應的經常使用方法來進行對應的處理。框架

經常使用的方法以下:函數

  • 若是是json格式的請求數據,則是採用request.data來獲取請求體的字符串。
  • 若是是form表單的請求體,那麼則能夠使用request.form來獲取參數。
  • 若是是url參數,例如:url?param1=xx&param2=xx,那麼則能夠使用request.args來獲取參數。
  • 若是須要區分GET\POST請求方法,則能夠使用request.method來進行判斷區分。
  • 若是須要接收上傳的文件,則能夠使用request.files來獲取上傳的文件信息。

下面來看看示例方法。post

Json請求: 使用 request.data 獲取請求體

處理視圖函數以下:ui

from flask import Flask, current_app, redirect, url_for, request
import json

# 實例化app
app = Flask(import_name=__name__)

# 經過methods設置POST請求
@app.route('/json', methods=["POST"])
def json_request():

    # 接收處理json數據請求
    data = json.loads(request.data) # 將json字符串轉爲dict
    user_name = data['user_name']
    user_age = data['user_age']

    return "user_name = %s, user_age = %s" % (user_name,user_age)

if __name__ == '__main__':
    app.run(debug=True)

複製代碼

使用postman模擬請求以下:url

form表單請求:request.form 獲取請求參數

在flask中獲取這個form的請求參數示例以下:spa

from flask import Flask, current_app, redirect, url_for, request

# 實例化app
app = Flask(import_name=__name__)

# 經過methods設置POST請求
@app.route('/form', methods=["POST"])
def form_request():

    # 接收post請求的form表單參數
    user_name = request.form.get('user_name')
    user_age = request.form.get('user_age')

    return "user_name = %s, user_age = %s" % (user_name,user_age)

if __name__ == '__main__':
    app.run(debug=True)
複製代碼

通常form表單的請求都是使用post請求,下面能夠使用postman來進行請求模擬,以下:

還有 form x-www-form-urlencoded 請求,以下:

上面form-data是能夠包含文件類型的form表單,而x-www-form-urlencoded只是單純 key - value的數據。

而處理的業務代碼是跟上面的同樣的。

form 表單請求中存在同一個參數名多個值的狀況

這種請求下能夠使用request.form.getlist() 來獲取同名多個參數,以下:

# 經過methods設置POST請求
@app.route('/form', methods=["POST"])
def form_request():

    # 接收post請求的form表單參數
    user_name = request.form.get('user_name')
    user_age = request.form.get('user_age')

    user_name_list = request.form.getlist('user_name')
    print(user_name_list)

    return "user_name = %s, user_age = %s, user_name_list = %s" % (user_name,user_age, user_name_list)
複製代碼

使用postman請求以下:

URL請求參數: request.args

在對於url上的?user_name=libai&user_age=17 該類的參數,則是使用request.args來獲取。 示例代碼以下:

# 經過methods設置GET請求
@app.route('/args', methods=["GET"])
def args_request():

    # 接收處理GET數據請求
    user_name = request.args.get('user_name')
    user_age = request.args.get('user_age')

    print("user_name = %s, user_age = %s" % (user_name,user_age))

    return "user_name = %s, user_age = %s" % (user_name,user_age)
複製代碼

使用postman模擬GET請求以下:

上傳文件請求:request.files

from flask import Flask, request

# 實例化app
app = Flask(import_name=__name__)

# 經過methods設置POST請求
@app.route('/upload_file', methods=["POST"])
def upload_file():

    # 接收post請求上傳的文件
    file = request.files.get('file')

    if file is None:
        # 表示沒有發送文件
        return "未上傳文件"

    # 直接使用上傳的文件對象保存
    file.save("file.jpg")

    return "上傳文件成功!"

if __name__ == '__main__':
    app.run(debug=True)
複製代碼

使用postman上傳文件以下:

相關文章
相關標籤/搜索