最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

Flask 中的 HTTP 方法

上一個(gè)小節(jié)中我們創(chuàng)建了第一個(gè) Flask 程序,并且在瀏覽器中成功看到了 Flask 程序給我們返回的 Hello World。但是你有沒有注意到,我們看到的內(nèi)容只是在后臺(tái)進(jìn)行寫死的,也就是說無論你怎么請求,看到的永遠(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é)議簡介

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ā)送請求,服務(wù)端根據(jù)接收到的請求 URL,向客戶端發(fā)送響應(yīng)信息。HTTP 請求-響應(yīng)模型如下所示:

圖片描述

1.2 HTTP 請求消息

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

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

  • 請求行;
  • 請求頭;
  • 請求正文。

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

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

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

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

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

1.3 常用的 HTTP 方法

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

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

3. Flask 中的 HTTP 方法

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

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

首先,導(dǎo)入類 flask.Flask 和 flask.request,request 封裝了請求消息,可以獲取請求的各種參數(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 的請求。

函數(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 的請求。

函數(shù) check_login 根據(jù)請求的參數(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 方法的請求。對常用的 HTTP 方法,使用思維導(dǎo)圖概括如下:

圖片描述