【问题标题】:Display HTML form data as JSON on new page using Flask使用 Flask 在新页面上将 HTML 表单数据显示为 JSON
【发布时间】:2016-12-27 04:04:53
【问题描述】:

我在页面上制作了一个简单的 HTML 表单,我想从表单中收集所有数据,将其转换为 JSON,然后在新页面上显示该 JSON。我不需要也不想要数据库来保存这些数据,我只希望它以正确的 JSON 格式输出到新页面上,以便使用它的人可以复制/粘贴该数据以用于其他用途。

我正在使用 Flask,这是我制作的扩展另一个基本布局页面的 HTML 表单:

{% extends "layout.html" %}
    {% block content %}
        <div class="container">
        <form action="/display" method="post" id="employForm"
        <fieldset>
        <label>First Name
          <input type="text" name="firstName" placeholder="Joe" required>
        </label>
        <label>Last Name
          <input type="text" name="lastName" id="lastName" placeholder="Schmoe" required>
        </label>

        <label>
        Department
          <select name="department" required>
            <option value="sales">Sales</option>
            <option value="marketing">Marketing</option>
            <option value="developer">Developer</option>
            <option value="business">Business Relations</option>
            <option value="sysAdmin">Systems Administration</option>
            <option value="drone">Drone</option>
          </select>
        </label>
            ... goes on
        </fieldset>
      <button class="button-primary" type="submit" value="Submit" form="employForm">SUBMIT!</button>
    </form>
  </div>
    {% endblock %}

表单比这长一点,包含几种不同类型的表单数据。这是服务器端(我制作的烧瓶应用):

from flask import Flask, render_template, request, jsonify

app = Flask(__name__)

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

@app.route('/display', methods=["GET", "POST"])
def display():
     result = request.form
     return render_template('display.html', result=result)


if __name__ == "__main__":
     app.run(host='0.0.0.0')

我觉得我很接近。目前,在我点击提交后,我被重定向到显示页面并打印出如下内容(显然,具体数据会根据输入答案发生变化):

ImmutableMultiDict([('startDate', u'2016-08-03'), ('employmentStatus', u'intern'), ('firstName', u'Hola'), ('lastName', u'Schmoe'), ('department', u'marketing'), ('location', u'SanFran'), ('inNYC', u'Yes'), ('requests', u'Blah blah try this.')])

我在 Stack Overflow 和其他地方进行了大量搜索......我遇到的问题是,他们都提供了一个人只想从他们的表单中收集一两个密钥的示例,而不是整个形式。

此外,出于我的特定目的,我强烈希望数据以 JSON 格式返回并在 display.html 页面上显示。

作为参考,以下是我看过的一些没有太大帮助的问题:

How to post data structure like json to flask?

Getting form data from html form using flask and python

Flask request and application/json content type

Send Data from a textbox into Flask?

非常感谢任何指导。谢谢!

【问题讨论】:

  • 如果这就是你所做的一切,你就不需要 Flask。您可以使用 HTML 和 JavaScript 完成所有操作。
  • 你能解释一下你的意思吗?您是在谈论使用 GET 而不是 POST 并使用 JavaScript 分配点击事件吗?如果是这样,我考虑过这个选项,但最终决定我想练习使用 python/Flask。而且这可能会在以后变成一个更复杂的项目,所以我决定使用 Flask 是更好的主意。
  • 没有。如果您所做的只是在页面上将表单字段显示为 JSON,则无需发出任何 HTTP 请求。您可以使用 JavaScript 捕获表单提交并将字段转换为 JSON(使用 jQuery's serializeArray 之类的东西)。
  • 我明白了,这很有意义。然而,我使用 Flask 的原因不是为了这个特定的任务,而是为了最终需要更复杂的长期项目。感谢您的帮助。

标签: python html json flask


【解决方案1】:

我看到你导入 jsonify...你可以使用它...

@app.route('/display', methods=["GET", "POST"])
def display():
     return jsonify(request.form)

或者您可以在模板中使用 tojson 过滤器

{{ result | tojson }}

result = json.dumps(request.form)

我认为其中任何一个都可以。

【讨论】:

  • 我尝试了第二个选项,它成功了,谢谢!稍后我会尝试其他选项并提供反馈。
猜你喜欢
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
相关资源
最近更新 更多