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

Flask 中的 HTTP 方法

上一個(gè)小節(jié)中我們創(chuàng)建了第一個(gè) Flask 程序,并且在瀏覽器中成功看到了 Flask 程序給我們返回的 Hello World。但是你有沒有注意到,我們看到的內(nèi)容只是在后臺(tái)進(jìn)行寫死的,也就是說無論你怎么請(qǐng)求,看到的永遠(yuǎn)是 Hello World,無法根據(jù)自己的需求讓 Flask 程序返回給你想要的內(nèi)容?

這該怎么辦呢?

不要急,我們有 HTTP 協(xié)議,HTTP 協(xié)議提供了多種方法訪問服務(wù)端資源,本小節(jié)講解常用的 HTTP 方法。并通過一個(gè)個(gè)具體的例子,說明如何在 Flask 中使用不同的 HTTP 方法。

Tips:本節(jié)課所有代碼已經(jīng)上傳到了 Github,可以點(diǎn)擊這里進(jìn)行下載。

1. HTTP 協(xié)議簡(jiǎn)介

1.1 概述

HTTP 協(xié)議是 Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫, 用于從萬維網(wǎng)(World Wide Web)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。

HTTP 協(xié)議工作于客戶端-服務(wù)端架構(gòu)為上。瀏覽器作為 HTTP 客戶端通過 URL 向 服務(wù)端發(fā)送請(qǐng)求,服務(wù)端根據(jù)接收到的請(qǐng)求 URL,向客戶端發(fā)送響應(yīng)信息。HTTP 請(qǐng)求-響應(yīng)模型如下所示:

圖片描述

1.2 HTTP 請(qǐng)求消息

HTTP 協(xié)議是一個(gè)簡(jiǎn)單的請(qǐng)求-響應(yīng)協(xié)議,它指定了客戶端可能發(fā)送給服務(wù)器什么樣的消息以及得到什么樣的響應(yīng)。請(qǐng)求和響應(yīng)消息的頭以 ASCII 碼形式給出;而消息內(nèi)容則具有一個(gè)類似 MIME 的格式。

瀏覽器向 Web 服務(wù)器發(fā)出請(qǐng)求時(shí),它向服務(wù)器傳遞了一個(gè)請(qǐng)求信息,HTTP 請(qǐng)求信息由 3 部分組成:

  • 請(qǐng)求行;
  • 請(qǐng)求頭;
  • 請(qǐng)求正文。

以下是一個(gè) HTTP 請(qǐng)求消息的例子:

GET / HTTP/1.1
Host: idcbgp.cn
Connection: keep-alive
User-Agent: Mozilla/5.0 AppleWebKit/537.36 Chrome/81.0
Accept: text/html,application/xml;image/webp,image/png,*/*;
...
省略
...

第一行是請(qǐng)求行,用來說明請(qǐng)求方法,要訪問的資源,以及所使用的 HTTP 版本。在這個(gè)例子中,請(qǐng)求方法是 GET,要訪問的資源是 /,HTTP 版本是 1.1,表示要獲取網(wǎng)站首頁 / 的內(nèi)容。

緊接著請(qǐng)求行之后的部分是請(qǐng)求頭部,用來說明服務(wù)器要使用的附加信息。例如:Host 指出請(qǐng)求的主機(jī)名,這里是 idcbgp.cn。

請(qǐng)求頭部之后是請(qǐng)求正文,在請(qǐng)求正文中可以添加任意的其他數(shù)據(jù),這個(gè)例子的請(qǐng)求正文為空。

1.3 常用的 HTTP 方法

根據(jù) HTTP 標(biāo)準(zhǔn),常用的 HTTP 請(qǐng)求如下所示:

請(qǐng)求方法 功能
GET 請(qǐng)求指定 URL 的頁面,這是最常見的方法
HEAD 類似于 GET 請(qǐng)求,但返回的響應(yīng)中沒有具體的內(nèi)容,用于獲取報(bào)頭
POST 向指定 URL 的頁面提交數(shù)據(jù)進(jìn)行處理請(qǐng)求,例如提交表單或者上傳文件
PUT 從客戶端向服務(wù)器傳送數(shù)據(jù),取代指定 URL 的頁面
DELETE 請(qǐng)求服務(wù)器刪除指定 URL 的頁面

3. Flask 中的 HTTP 方法

上面我們已經(jīng)大概了解了什么是 HTTP 協(xié)議,簡(jiǎn)單來說就是客戶端與服務(wù)端用來通信的協(xié)議,HTTP 協(xié)議中規(guī)定和很多 HTTP 方法來讓我們根據(jù)不同的需求向服務(wù)端發(fā)起請(qǐng)求。下面我們通過一個(gè)具體的例子,說明如何在 Flask 中使用不同的 HTTP 方法:

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

首先,導(dǎo)入類 flask.Flask 和 flask.request,request 封裝了請(qǐng)求消息,可以獲取請(qǐng)求的各種參數(shù)。

@app.route('/login', methods = ['GET'])
def login():
    return '''
<form action="/check_login" method="POST">
  <p><input type="text" name="name"/></p>
  <p><input type="password" name="password"/></p>
  <p><input type="submit" value="submit"/></p>
</form>
'''

定義處理路徑 /login 的函數(shù) login,裝飾器 @app.route(’/login’, methods = [‘GET’]) 表示使用 GET 方法處理路徑 /login 的請(qǐng)求。

函數(shù) login 返回一段用于登錄的 HTML 表單,表單包括 2 個(gè)字段: name 和 password。在第 4 行,指定使用 POST 方法提交表單給服務(wù)端的 /check_login 頁面。

@app.route('/check_login', methods = ['POST'])
def check_login():
    name = request.form['name']
    password = request.form['password']
    if name == 'guest' and password == '123':
        return 'Login succeed'
    else:
        return 'Login failed'

定義處理路徑 /check_login 的函數(shù) check_login,裝飾器 @app.route(’/check_login’, methods = [‘POST’]) 表示使用 POST 方法處理路徑 /check_login 的請(qǐng)求。

函數(shù) check_login 根據(jù)請(qǐng)求的參數(shù) name 和 password 是否正確,返回給用戶相應(yīng)的信息。在第 3 行,提取參數(shù) name 的值,在第 4 行,提取參數(shù) password 的值。如果 name 是 guest,password 是 123,則返回登錄成功消息,否則返回登錄失敗消息。

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

調(diào)用 app.run() 運(yùn)行程序。用戶在瀏覽器中輸入 http://localhost:5000/login,瀏覽器顯示:

圖片描述

用戶輸入正確的 name 和 password 后,瀏覽器跳轉(zhuǎn)到頁面 http://localhost:5000/check_login,顯示:

圖片描述

4. 小結(jié)

本節(jié)講解了 HTTP 協(xié)議中的不同方法,通過一個(gè)具體的例子,講解在 Flask 應(yīng)用中,如何處理指定 HTTP 方法的請(qǐng)求。對(duì)常用的 HTTP 方法,使用思維導(dǎo)圖概括如下:

圖片描述