首页 > 解决方案 > 有什么方法可以通过 FLASK 将表单数据作为可用变量获取?

问题描述

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

蟒蛇代码

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>

标签: pythonhtmlformsflaskserver

解决方案


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

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

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

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

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


推荐阅读