Flask 請求表
通過這個解釋,我們將瞭解提交表單時發生的兩件事,以及我們如何在 Flask 和 Python 的幫助下接收和獲取表單資料。
藉助 Flask 和 Python 接收和獲取表單資料
瀏覽器向伺服器發出請求;這就是他們交流的方式。Get
請求通常用於從伺服器檢索資料或向伺服器請求一些資料;但是,請求只是瀏覽器傳送到伺服器的幾條資料。
然後伺服器會看到這些片段,並希望能理解它們的含義。例如,請求的 get
部分只是請求中包含的字串。
當伺服器看到這一點時,如果它被程式設計為響應 get
請求,它就可以響應。但是,你可以發出三明治
請求,而不是發出 get
請求。
除非你對伺服器進行編碼以專門理解這一點,否則伺服器將不知道你在說什麼。
如果你使用三明治
請求,你將不再發出 HTTP 請求。HTTP 是一種協議,它意味著一組規則,如果你遵循規則,比如使用實際存在的 HTTP 方法,那麼你就是在使用 HTTP,如果你不這樣做,那麼你就不是。
這很重要,因為如果我們想使用 HTTP,我們需要了解一些規則。例如,post
請求是另一種型別的請求,它可以具有稱為主體的有效負載。
那是更長的資料,它包含在請求中;這可能是一串資料或像 JSON 這樣更正式的東西。它也可以是一個檔案,也可以是表單資料。
一些 HTTP 請求可以有有效負載,而另一些則不能。例如,Get
請求不能有有效負載,但 post
和 put
可以。
我們可以告訴我們的表單使用不同的請求型別,具體取決於我們希望它如何傳送資料。如果我們告訴我們的表單使用 get
,那麼它就不能將資料放入有效負載中;它把它放在 URL 中。
如果我們告訴它使用 post
,它會將資料放入有效負載中。
讓我們建立一個 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.html
的 render_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 應用程式了。確保你首先啟用了虛擬環境,當我們到達端點時,我們會看到顯示錶單,然後填寫並提交表單。
現在,我們可以看到一些東西被列印出來了。
如果我們將 HTML 程式碼中的表單方法更改為 post
,我們將不再接收查詢字串。相反,我們需要更改 Flask 程式碼以訪問 request.form
,Flask 將收到的任何表單資料放入請求中。
<form action="#" method="post" >
我們還必須告訴端點可能會收到 get
和 post
請求。如果我們想訪問特定的表單資料欄位,我們可以使用 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)
輸出:
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