将数据从文本框发送到Flask?


92

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


为什么不使用HTML表单并直接发布它?还是您需要异步执行此操作?在这种情况下,您需要阅读一些有关AJAX的内容。:-)
马丁·皮特斯

1
我知道我可以使用HTML表单,但是如何将这些信息传递给flask应用程序?
ollien 2012年

Answers:


154

除非您想做更复杂的事情,否则将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

这是有关访问请求数据的Flask文档。

如果您需要需要验证的更复杂的表单,则可以查看WTForms以及如何将它们与Flask集成

注意:除非你有其他任何限制,你并不真正需要的JavaScript在所有发送数据(虽然你可以使用它)。


1
嘿,这曾经工作过,但是现在抛出错误500,有什么想法吗?
ollien 2012年

它应该可以正常工作...放在app.debug = True前面,app.run()这样您就可以获取异常和错误的回溯信息。
pacha 2012年

是的,我忘记了这一点,我是个白痴,忘记了将HTML放在模板文件夹中。
ollien 2012年

如果有人需要使用Flask进行操作,我会浪费一些时间尝试使用较大的textarea而不是文本框进行操作,解决方法在这里
cardamom

@cardamom我真的不明白你的意思。使用textarea或输入type文本不会以任何方式更改解决方案(您要链接的解决方案与此完全相同)。您不必更改Python方面,只需替换<input type="text" name="text">为,就<textarea name="text"></textarea>可以了。
pacha

9

声明一个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
  }
});

2

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

request.args.get('form_name')

1

假设你已经知道如何一个观点写Flask该响应的URL,创建一个读取request.post数据。要向input box此帖子数据添加,请在页面上使用文本框创建一个表单。然后您可以jquery用来做

var data = $('#<form-id>').serialize()

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

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

0

这对我有用。

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
      }
    });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.