Flask 請求表

Salman Mehmood 2024年2月15日
Flask 請求表

通過這個解釋,我們將瞭解提交表單時發生的兩件事,以及我們如何在 Flask 和 Python 的幫助下接收和獲取表單資料。

藉助 Flask 和 Python 接收和獲取表單資料

瀏覽器向伺服器發出請求;這就是他們交流的方式。Get 請求通常用於從伺服器檢索資料或向伺服器請求一些資料;但是,請求只是瀏覽器傳送到伺服器的幾條資料。

然後伺服器會看到這些片段,並希望能理解它們的含義。例如,請求的 get 部分只是請求中包含的字串。

Flask 請求表示例 1

當伺服器看到這一點時,如果它被程式設計為響應 get 請求,它就可以響應。但是,你可以發出三明治請求,而不是發出 get 請求。

除非你對伺服器進行編碼以專門理解這一點,否則伺服器將不知道你在說什麼。

Flask 請求表示例 2

如果你使用三明治請求,你將不再發出 HTTP 請求。HTTP 是一種協議,它意味著一組規則,如果你遵循規則,比如使用實際存在的 HTTP 方法,那麼你就是在使用 HTTP,如果你不這樣做,那麼你就不是。

這很重要,因為如果我們想使用 HTTP,我們需要了解一些規則。例如,post 請求是另一種型別的請求,它可以具有稱為主體的有效負載。

那是更長的資料,它包含在請求中;這可能是一串資料或像 JSON 這樣更正式的東西。它也可以是一個檔案,也可以是表單資料。

一些 HTTP 請求可以有有效負載,而另一些則不能。例如,Get 請求不能有有效負載,但 postput 可以。

我們可以告訴我們的表單使用不同的請求型別,具體取決於我們希望它如何傳送資料。如果我們告訴我們的表單使用 get,那麼它就不能將資料放入有效負載中;它把它放在 URL 中。

Flask 請求表示例 3

如果我們告訴它使用 post,它會將資料放入有效負載中。

Flask 請求表示例 4

讓我們建立一個 Flask 應用程式來接收此表單資料,例如 post。我們將建立一個名為 app.py 的檔案,其中包含我們的 Flask 程式碼,我們還將建立一個虛擬環境並在其中安裝一個 Flask。

我們知道 Flask 使用函式來響應瀏覽器請求,現在我們想用我們的 HTML 頁面響應瀏覽器請求,以便在我們第一次訪問 Flask 應用程式時瀏覽器可以真正顯示它。

要使用 Flask 做到這一點,我們需要進行一些初始設定。我們需要建立一個 templates 資料夾,該資料夾必須與 app.py 位於同一位置。

templates 中,我們將放入 index.html 檔案;然後,在這個檔案中,我們將使用對所有人開放原始碼的 bootstrap starter 模板。

然後我們找到 body 標籤並編寫一個包含兩個欄位的基本 HTML 表單。

<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">

    <title>Hello, world!</title>
  </head>
  <body>
   <h1>Hello, this is about flask!</h1>
    <form action="#">
        <p>Name:</p>
        <p><input type="text" name="candidate-name" /></p>
        <p>City:</p>
        <p><input type="text" name="candidate-city" /></p>
        <p><input type="submit" value="submit"/></p>
    </form>

    <!-- Optional JavaScript; choose one of the two! -->

    <!-- Option 1: Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>

    <!-- Option 2: Separate Popper and Bootstrap JS -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
    -->
  </body>
</html>

然後,我們需要使用 Flask 將 HTML 程式碼返回給使用者。為此,我們必須在 app.py 中匯入一個 Flask 和 render_template

現在,我們需要使用裝飾器新增一個端點,然後返回 index.htmlrender_template()

讓我們從 Flask 中匯入一個 request,並在我們的端點中新增一個 print 語句以顯示 request.args 的內容,Flask 將在其中放置查詢字串,並且它將接收任何請求。

from flask import Flask, render_template, request

app = Flask(__name__)


@app.route("/")
def INDEX():
    print(request.args)
    return render_template("index.html")


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

請注意,我們只能在響應請求的函式中訪問 request.args

現在,我們可以啟動 Flask 應用程式了。確保你首先啟用了虛擬環境,當我們到達端點時,我們會看到顯示錶單,然後填寫並提交表單。

Flask 請求表輸出 1

現在,我們可以看到一些東西被列印出來了。

如果我們將 HTML 程式碼中的表單方法更改為 post,我們將不再接收查詢字串。相反,我們需要更改 Flask 程式碼以訪問 request.form,Flask 將收到的任何表單資料放入請求中。

<form action="#" method="post" >

我們還必須告訴端點可能會收到 getpost 請求。如果我們想訪問特定的表單資料欄位,我們可以使用 request.form.get()

這是一個獲取我們要訪問的欄位的名稱並返回其值的方法,例如 request.form.get("candidate-name")request.form.get("candidate-city") 會給我們他們的價值觀。

from flask import Flask, request, render_template

app = Flask(__name__)


@app.route("/", methods=["GET", "POST"])
def INDEX():
    print(request.form)
    print(request.form.get("candidate-name"))
    print(request.form.get("candidate-city"))
    return render_template("index.html")


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

輸出:

Flask 請求表輸出 2

作者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn