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

Flask 中的 HTTP 方法

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

這該怎么辦呢?

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

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

1. HTTP 協(xié)議簡介

1.1 概述

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

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

圖片描述

1.2 HTTP 請求消息

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

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

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

以下是一個 HTTP 請求消息的例子:

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,*/*;
...
省略
...

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

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

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

1.3 常用的 HTTP 方法

根據(jù) HTTP 標準,常用的 HTTP 請求如下所示:

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

3. Flask 中的 HTTP 方法

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

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

首先,導入類 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 個字段: name 和 password。在第 4 行,指定使用 POST 方法提交表單給服務端的 /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 是否正確,返回給用戶相應的信息。在第 3 行,提取參數(shù) name 的值,在第 4 行,提取參數(shù) password 的值。如果 name 是 guest,password 是 123,則返回登錄成功消息,否則返回登錄失敗消息。

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

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

圖片描述

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

圖片描述

4. 小結

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

圖片描述