【问题标题】:Is there any way that i can get form data as usable variables through FLASK? [duplicate]有什么方法可以通过 FLASK 获取表单数据作为可用变量? [复制]
【发布时间】:2021-09-12 08:26:28
【问题描述】:

我正在尝试通过烧瓶从这个 html 表单中获取数据并将其存储在 python 变量中,以便我以后可以访问和处理。 在 python 代码中,我有 req = request.form 并返回一个字典,其中包含我需要的所有信息,但我无法在 form_input() 函数之外访问它。 无论如何我可以做到这一点吗? 谢谢

python 代码

from flask import Flask, request, redirect, render_template

app = Flask(__name__)

path = r'C:\Users\tiberiu.ghimbas\PycharmProjects\pythonProject\form.html'
lista = []

app.testing = True
client = app.test_client()

@app.route('/')
def home():
    return render_template('form.html')


@app.route('/submit_form', methods=['GET', 'POST'])
def form_input():

    if request.method == "POST":
        req = request.form
        last_name = request.form['lname']
        first_name = request.form['fname']
        email = request.form['email']
        department = request.form['departament']
        data_angajare = request.form['data_angajare']

        return redirect(request.url)

    return render_template('form.html')


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

html

<html>
  <head>
    <title>Form</title>
  </head>
  <body>
    <form action = "/submit_form" method = "post">
      <label for = "fname">First name:</label>
      <input type = "text" id = "fname" name = "fname"><br>

      <label for = "lname">Last name:</label>
      <input type = "text" id = "lname" name = "lname"><br><br>

      <label for = "mail">Email:</label>
      <input type = "text" id = "mail" name = "email"></input> <br><br>

      <input type = "radio" id = "1" name = "departament" value = "Hotel">
      <label for = "1">Hotel</label>

      <input type = "radio" id = "2" name = "departament" value = "Vanzari">
      <label for = "2">Vanzari</label>

      <input type = "radio" id = "3" name = "departament" value = "Marketing">
      <label for = "3">Marketing</label>

      <input type = "radio" id = "4" name = "departament" value = "IT">
      <label for = "4">IT</label>
      <br>
      <br>

      <label for = "date">Data angajarii: </label>
      <input type = "date" id = "date" name = "data_angajare"> <br><br>

      <input type = "submit" value = "submit"></input>

    </form>

  </body>
</html>

【问题讨论】:

  • 为什么不将 req 存储到某个全局集合中?通常你为此使用烧瓶会话。

标签: python html forms flask server


【解决方案1】:

您有多种方法可以实现这一目标:

  1. 将数据存储在当前或其他 python 脚本中的全局变量中。这是最快的方法,但重启服务器后数据会丢失。如果您稍后将烧瓶放在使用工人的东西后面,您也会遇到问题,因为它们在您的全局变量中会有不同的值。还有烧瓶 g 对象。它是一个全局变量,仅在一个请求期间有效,但您可以从任何地方访问它的数据。

  2. 将信息保存在一个(或多个)文件中。工作量有点大,但数据是持久的,worker 不会有问题。

  3. 使用数据库(推荐)。 Flask 自带 sqlite,但我个人更喜欢 pymysql (https://pypi.org/project/PyMySQL/) 用于数据库。您将从选项 2 中获得好处,但您也可以轻松高效地搜索您的数据,这可能是也可能不是。大多数 Web 应用程序使用数据库来存储它们的数据。

  4. 使用烧瓶会话对象。您可以在此对象中保存任何用户/会话相关数据,每个会话都是唯一的。数据保存在用户浏览器的 cookie 中(加密)。它不是 100% 安全的,所以不要在里面放任何密码或类似的东西。默认情况下,烧瓶会话会持续到用户关闭浏览器(取决于浏览器),但您可以配置烧瓶以延长保存时间。只要是同一用户且会话 cookie 存在,数据就会从请求传递到请求。

【讨论】:

    猜你喜欢
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2018-01-05
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多