【问题标题】:Send data from a textbox into Flask?将数据从文本框发送到 Flask?
【发布时间】:2012-08-29 23:11:06
【问题描述】:

我想知道是否有办法从 HTML 中的文本框中获取某些内容,将其输入到烧瓶中,然后使用 Python 解析该数据。我在想这可能涉及一些 JS,但我可能是错的。有什么想法吗?

【问题讨论】:

  • 为什么不使用 HTML 表单并直接 POST 呢?还是您需要异步执行此操作?在这种情况下,您将需要阅读有关 AJAX 的内容。 :-)
  • 我知道我可以使用 HTML 表单,但我如何将该信息传递给烧瓶应用程序?

标签: python flask


【解决方案1】:

除非您想做更复杂的事情,否则将 HTML 表单中的数据输入 Flask 非常容易。

  • 创建一个接受 POST 请求的视图 (my_form_post)。
  • 访问字典request.form中的表单元素。

templates/my-form.html:

<form method="POST">
    <input name="text">
    <input type="submit">
</form>
from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/')
def my_form():
    return render_template('my-form.html')

@app.route('/', methods=['POST'])
def my_form_post():
    text = request.form['text']
    processed_text = text.upper()
    return processed_text

这是关于 accessing request data 的 Flask 文档。

如果您需要需要验证的更复杂的表单,可以查看WTFormshow to integrate them with Flask

注意:除非您有任何其他限制,否则您实际上并不需要 JavaScript 来发送您的数据(尽管您可以使用它)。

【讨论】:

  • 嘿,这曾经有效,但现在抛出错误 500,有什么想法吗?
  • 它应该工作得很好......把app.debug = True放在app.run()之前,这样你就可以得到异常和错误的回溯。
  • 是的,我忘记了,我是个白痴,忘了把我的 HTML 放到我的模板文件夹中。
  • 如果有人需要使用 Flask 执行此操作,我浪费了一些时间尝试使用更大的文本区域而不是文本框来执行此操作,解决方案是 here
  • @cardamom 我不太明白你的意思。使用 textarea 或 text 类型的输入不会以任何方式更改解决方案(您要链接的解决方案与此解决方案完全相同)。您不必更改 Python 端,只需将 &lt;input type="text" name="text"&gt; 替换为 &lt;textarea name="text"&gt;&lt;/textarea&gt; 就可以了。
【解决方案2】:

声明一个 Flask 端点以接受 POST 输入类型,然后执行必要的步骤。使用 jQuery 发布数据。

from flask import request

@app.route('/parse_data', methods=['GET', 'POST'])
def parse_data(data):
    if request.method == "POST":
         #perform action here
var value = $('.textbox').val();
$.ajax({
  type: 'POST',
  url: "{{ url_for('parse_data') }}",
  data: JSON.stringify(value),
  contentType: 'application/json',
  success: function(data){
    // do something with the received data
  }
});

【讨论】:

    【解决方案3】:

    服务器(您的烧瓶应用程序)和客户端(浏览器)之间的所有交互都通过请求和响应进行。当用户在您的表单中点击按钮提交时,他的浏览器会使用此表单向您的服务器(flask 应用程序)发送请求,您可以获得如下表单的内容:

    request.args.get('form_name')
    

    【讨论】:

      【解决方案4】:

      假设您已经知道如何在响应 url 的 Flask 中使用 write a view,请创建一个读取 request.post 数据的地址。要将input box 添加到此帖子数据中,请在您的页面上使用文本框创建一个表单。然后你可以使用jquery来做

      var data = $('#&lt;form-id&gt;').serialize()

      然后使用类似下面的方式异步发布到您的视图。

      $.post('<your view url>', function(data) {
        $('.result').html(data);
      });
      

      【讨论】:

        【解决方案5】:

        这对我有用。

        def parse_data():
            if request.method == "POST":
                data = request.get_json()
                print(data['answers'])
                return render_template('output.html', data=data)
        
        $.ajax({
              type: 'POST',
              url: "/parse_data",
              data: JSON.stringify({values}),
              contentType: "application/json;charset=utf-8",
              dataType: "json",
              success: function(data){
                // do something with the received data
              }
            });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-23
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多