第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Flask 的 request 對象

瀏覽器訪問服務(wù)端時,向服務(wù)端發(fā)送請求。Flask 程序使用 request 對象描述請求信息,本小節(jié)介紹 request 對象的概念,以及它的重要屬性:form 和 args,并對屬性的使用給出一個例子。

1. 簡介

瀏覽器訪問服務(wù)端,需要將相應(yīng)的數(shù)據(jù)發(fā)送給服務(wù)端,可能有如下場景:

  1. 通過 URL 參數(shù)進(jìn)行查詢,瀏覽器需要將查詢參數(shù)發(fā)送給服務(wù)端
  2. 提交表單 form 進(jìn)行查詢,瀏覽器需要將表單 form 中的字段發(fā)送給服務(wù)端
  3. 上傳文件,瀏覽器需要將文件發(fā)送給服務(wù)端

服務(wù)端收到將客戶端發(fā)送的數(shù)據(jù)后,封裝形成一個請求對象,在 Flask 中,請求對象是一個模塊變量 flask.request,它包含了如下常用屬性:

屬性 說明
method 當(dāng)前的請求方法
form 表單參數(shù)及其值的字典對象
args 查詢字符串的字典對象
values 包含所有數(shù)據(jù)的字典對象
json 如果 mimetype 是 application/json,這個參數(shù)將會解析 json 數(shù)據(jù),如果不是則返回 None
headers http 協(xié)議頭部
cookies cookie 名稱和值的字典對象
files 與上傳文件有關(guān)的數(shù)據(jù)

假設(shè) URL 等于 http://localhost/query?userId=123,request 對象中與 URL 參數(shù)相關(guān)的屬性如下:

屬性 說明
url http://localhost/query?userId=123
base_url http://localhost/query
host localhost
host_url http://localhost/
path /query
full_path /query?userId=123

2. 獲取 URL 相關(guān)參數(shù)

本節(jié)編寫一個 Flask 程序 request-url.py,打印 request 中和 URL 相關(guān)的屬性:

from flask import Flask
from flask import request
app = Flask(__name__)

def echo(key, value):
    print('%-10s = %s' % (key, value))

@app.route('/query')
def query():
    echo('url', request.url)
    echo('base_url', request.base_url)    
    echo('host', request.host)
    echo('host_url', request.host_url)
    echo('path', request.path)
    echo('full_path', request.full_path)
    return 'hello'

if __name__ == '__main__':
    app.run(port = 80)
url        = http://localhost/query?userId=123
base_url   = http://localhost/query
host       = localhost
host_url   = http://localhost/
path       = /query
full_path  = /query?userId=123

3. 解析查詢參數(shù)

request.args 保存了 URL 中的查詢參數(shù),下面編寫一個例子 request-args.py 解析 URL 中的查詢參數(shù):

from flask import Flask, request
app = Flask(__name__)

@app.route('/query')
def query():
    print('name =', request.args['name'])
    print('age =', request.args['age'])
    return 'hello'

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

在第 4 行,編寫路徑 /query 對應(yīng)的處理函數(shù) query(),打印查詢參數(shù) name 和 age 的值。在瀏覽器中輸入 URL:http://localhost:5000/query?name=zhangsan&age=13 ,查詢字符串為 name=zhangsan&age=13,包含有兩個查詢參數(shù) name 和 age,F(xiàn)lask 程序在終端輸出如下:

name = zhangsan
age = 13

4. 解析表單參數(shù)

request.form 保存了表單參數(shù),下面編寫一個例子 request-form.py 解析表單參數(shù):

from flask import Flask, request
app = Flask(__name__)

@app.route('/')
def root():
    file = open('form.html', encoding = 'utf-8')
    return file.read()

@app.route('/addUser', methods = ['POST'])
def check_login():
    name = request.form['name']
    age = request.form['age']
    print('name = %s' % name)
    print('age = %s' % age)
    return 'addUser OK'

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

在第 4 行,編寫路徑 / 的處理函數(shù) root(),它讀取文件 form.html,將內(nèi)容返回給瀏覽器。在第 9 行,編寫路徑 /addUser 的處理函數(shù) addUser(),打印 request.form 中的參數(shù) name 和 age。

路徑 / 返回 form.html,內(nèi)容如下:

<html>
<body>
  <form action="/addUser" method="POST">
    <p><input type="text" name="name"/></p>
    <p><input type="text" name="age"/></p>
    <p><input type="submit" value="submit"/></p>
  </form>
</body>  
</html>

form.html 中包含一個表單,action 為 /addUser,method 為 POST,表單中包含有兩個字段 name 和 age。訪問 localhost:5000 時,瀏覽器顯示如下:

圖片描述

點(diǎn)擊提交,瀏覽器將請求 /addUser 發(fā)送給服務(wù)端,服務(wù)端在終端打印輸出:

name = zhangsan
age = 50

5. 解析 json 數(shù)據(jù)

編寫web api,在寫 post 請求接口時,通常將接口參數(shù)以 json 格式發(fā)送給服務(wù)端,request.json 保存了請求中的 json 數(shù)據(jù),下面編寫一個例子 request-json.py 解析 json 數(shù)據(jù):

from flask import Flask, request
app = Flask(__name__)

@app.route('/')
def root():
    file = open('api.html', encoding = 'utf-8')
    return file.read()

@app.route('/api/addUser', methods = ['POST'])
def addUser():
    json = request.json
    print('JSON', json)
    print('name = %s' % json['name'])
    print('age = %s' % json['age'])
    return 'addUser OK'

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

在第 4 行,編寫路徑 / 的處理函數(shù) root(),它讀取文件 api.html,將內(nèi)容返回給瀏覽器。在第 9 行,編寫路徑 /api/addUser 的處理函數(shù) addUser(),打印 request.json 中的參數(shù) name 和 age,返回給瀏覽器 ‘a(chǎn)ddUser OK’??蛻舳耸褂?POST 方法提交請求 /api/addUser,在 Flask 中,需要指明 methods 為 ‘POST’。

路徑 / 返回 api.html,api.html 通過 ajax 調(diào)用服務(wù)端的 /api/addUser,內(nèi)容如下:

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.0/jquery.js"></script>
<h1 id='result'>result</h1>
<script>
var data = JSON.stringify({'name':'zhangsan', 'age':'20'});
$.ajax({
    url: '/api/addUser',
    type: 'post',
    contentType:'application/json',
    data: data,
   success: function(data) {
        $("#result").html(data);
    },
    error: function(e) {
        alert('ERROR')
    }
});
</script>

在第 2 行,定義 id 為 result 的標(biāo)簽,用于顯示調(diào)用結(jié)果;在第 4 行,設(shè)定 /api/addUser 的接口參數(shù): name 和 age;在第 5 行,通過 jquery.ajax 調(diào)用服務(wù)端的 /api/addUser。請求調(diào)用成功時,回調(diào) success 函數(shù),將結(jié)果顯示在 id 為 result 的標(biāo)簽中,如下所示:

圖片描述

6. 源代碼下載

7. 小結(jié)

本小節(jié)講解了 request 對象的常見屬性,使用思維導(dǎo)圖總結(jié)如下:

圖片描述