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