【问题标题】:Flask-Appbuilder POST from form None来自表单的 Flask-Appbuilder POST 无
【发布时间】:2017-04-29 14:25:34
【问题描述】:

我的 POST 发送所选 RadioField 的数据,但在 Flask 中,我只得到 form.display.data 的“无”。 GET 工作正常,并且 RadioFields 在页面上,当我单击“提交”时,显示变量会在 POST 中发送,并且选择正确。

如何获取 POST 的实际数据?

views.py

class Items(SimpleFormView):
    route_base = "/manage"
    datamodel = SQLAInterface(TerminalA82)
    message = "Please make a seslection"
    form = List_Items()

    myList = Controller.generate #<-- external function provides list
    form.display.choices = myList

    @expose('/manage', methods=['GET'])
    @has_access
    def this_form_get(self):
        return self.render_template('list_items.html', param1='Items', form=self.form)

    @expose('/manage', methods=['POST'])
    @has_access
    def this_form_post(self):
        return self.render_template('blank.html', param1=str(self.form.display.data))

POST 在页面上呈现“无”。

forms.py

class List_Items(Form):
    display = RadioField('Items', choices=[], coerce=int)

list_items.html(模板)

{% extends "appbuilder/base.html" %}
{% block content %}
<h3>{{param1}}</h3>
<form method="post">
    {{ form.display }}
    <input type="submit" value="Submit">
</form>
{% endblock %}

我的列表内容

>>> print myList
[('5', 'MyBAsic'), ('9', 'Cloudtest'), ('12', 'Test2'), ('15', 'NHLS-Test'), ('18', 'HSRC-Test')]
>>> 

blank.html

{% extends "appbuilder/base.html" %}
{% block content %}
    <p>{{param1}}</p>
{% endblock %}

【问题讨论】:

  • 打印 myList 并粘贴 blank.html。我认为您需要将其阅读为 request.form['Items']
  • 我在上面的帖子中也包含了myListblank.html的内容

标签: python flask flask-wtforms flask-appbuilder


【解决方案1】:

是的,如果您看到烧瓶文档,那么您需要以request.form['Items'] 而不是form.display.data 的身份访问该数据。

【讨论】:

  • 当我更改为self.request.form['Items'] 时,我得到AttributeError: 'Item' object has no attribute 'request'
  • 没有请求不是 Item 对象的一部分,它是类 Items 的实例。试试 request.form['Items']。请求对象由烧瓶传递给视图。
  • 如果我改成request.form['Items'],那么我会得到NameError: global name 'request' is not defined
  • 您需要在文件顶部说 from flask import request。我建议你在尝试 Appbuilder 之前先使用基础烧瓶并习惯它。
  • 是的,我刚刚发现了这一点。谢谢。我设法解决了它。我必须做request.form['display'] 而不是['Items']。现在我得到了价值。感谢您的帮助
猜你喜欢
  • 2019-05-17
  • 2017-05-11
  • 2022-12-14
  • 1970-01-01
  • 2011-07-25
  • 2018-12-19
  • 2020-09-29
  • 2013-04-16
  • 2018-05-21
相关资源
最近更新 更多