Python 为什么StringField总是没有?

Python 为什么StringField总是没有?,python,flask,wtforms,flask-bootstrap,Python,Flask,Wtforms,Flask Bootstrap,我正在尝试使用Flask、WTForms和通过Flask引导提供的宏来读取表单。这种方法在某些情况下有效,而在其他情况下——看起来很相似——则不起作用。当我检查特定StringField的内容时,它的计算结果总是为None,导致InputRequired()验证失败 forms.py: {% extends 'layout.html' %} {% import "bootstrap/wtf.html" as wtf %} {% block content %} <div class=

我正在尝试使用Flask、WTForms和通过Flask引导提供的宏来读取表单。这种方法在某些情况下有效,而在其他情况下——看起来很相似——则不起作用。当我检查特定StringField的内容时,它的计算结果总是为None,导致InputRequired()验证失败

forms.py:

{% extends 'layout.html' %}

{% import "bootstrap/wtf.html" as wtf %}
{% block content %}
  <div class="container-fluid">
    <h3><u>Test:</u></h3>
    <br>
    <div class="container-fluid col-md-3">
      <form action="" method="POST" class="form" role="form" onsubmit="/">
        <div class="row">
          <div class="col-md-12">
            {{ wtf.form_field(form.name, form_type="inline", placeholder="Name") }}
          </div>
        </div>
        <div class="row">
          <div class="col-md-5">
            {{ wtf.form_field(form.date) }}
          </div>
        </div>
        <div class="row">
          <div class="col-md-12">
            {{ wtf.form_field(form.address) }}
          </div>
        </div>
        {{ wtf.form_field(form.submit, class="btn btn-primary") }}
      </form>
      {% for message in get_flashed_messages() %}
      <div class="alert alert-warning">
        <button type="button" class="close" data-dismiss="alert">&times;</button>
        {{ message }}
      </div>
    </div>
    {% endfor %}
  </div>
{% endblock %}
从wtforms导入表单、验证程序、\
StringField、PasswordField、SubmitField、\
选择场
从wtforms.fields.html5导入日期字段
从wtforms.validators导入ValidationError、InputRequired、NoneOf、\
等长,长度,可选
类测试表单(表单):
name=StringField('name',[validators.InputRequired(message='Please enter name!']))
日期=日期字段('date',格式='%Y-%m-%d')#,默认值=日期。今天()
地址=字符串字段('地址')
submit=SubmitField('Add')
test.py:

{% extends 'layout.html' %}

{% import "bootstrap/wtf.html" as wtf %}
{% block content %}
  <div class="container-fluid">
    <h3><u>Test:</u></h3>
    <br>
    <div class="container-fluid col-md-3">
      <form action="" method="POST" class="form" role="form" onsubmit="/">
        <div class="row">
          <div class="col-md-12">
            {{ wtf.form_field(form.name, form_type="inline", placeholder="Name") }}
          </div>
        </div>
        <div class="row">
          <div class="col-md-5">
            {{ wtf.form_field(form.date) }}
          </div>
        </div>
        <div class="row">
          <div class="col-md-12">
            {{ wtf.form_field(form.address) }}
          </div>
        </div>
        {{ wtf.form_field(form.submit, class="btn btn-primary") }}
      </form>
      {% for message in get_flashed_messages() %}
      <div class="alert alert-warning">
        <button type="button" class="close" data-dismiss="alert">&times;</button>
        {{ message }}
      </div>
    </div>
    {% endfor %}
  </div>
{% endblock %}
从flask导入渲染模板,重定向,请求
需要从flask\u安全导入登录\u
从application.routes导入路由
从application.forms导入TestForm
@route.route('/test',methods=['POST','GET'])
@需要登录
def test():
form=TestForm()
打印(表单.名称.数据)
如果request.method==“POST”和form.validate():
打印(“已验证”)
返回重定向(“/”)
返回呈现模板('test.html',title=“Asset Manager”,form=form)
test.html:

{% extends 'layout.html' %}

{% import "bootstrap/wtf.html" as wtf %}
{% block content %}
  <div class="container-fluid">
    <h3><u>Test:</u></h3>
    <br>
    <div class="container-fluid col-md-3">
      <form action="" method="POST" class="form" role="form" onsubmit="/">
        <div class="row">
          <div class="col-md-12">
            {{ wtf.form_field(form.name, form_type="inline", placeholder="Name") }}
          </div>
        </div>
        <div class="row">
          <div class="col-md-5">
            {{ wtf.form_field(form.date) }}
          </div>
        </div>
        <div class="row">
          <div class="col-md-12">
            {{ wtf.form_field(form.address) }}
          </div>
        </div>
        {{ wtf.form_field(form.submit, class="btn btn-primary") }}
      </form>
      {% for message in get_flashed_messages() %}
      <div class="alert alert-warning">
        <button type="button" class="close" data-dismiss="alert">&times;</button>
        {{ message }}
      </div>
    </div>
    {% endfor %}
  </div>
{% endblock %}
{%extends'layout.html%}
{%import“bootstrap/wtf.html”作为wtf%}
{%block content%}
测试:

{{wtf.form_字段(form.name,form_type=“inline”,placeholder=“name”)} {{wtf.form_字段(form.date)} {{wtf.form_字段(form.address)} {{wtf.form_字段(form.submit,class=“btn btn primary”)} {get_Flash_messages()%中的消息为%s} &时代; {{message}} {%endfor%} {%endblock%}
这总是显示“无”,因此即使我输入名称并按下“添加”按钮,也永远不会通过验证检查。
我尝试创建一个最小的示例(仍然存在相同的问题),但我遗漏了应用程序的大部分内容,因此如果您需要更多信息,请告诉我,我很乐意提供这些信息。

多亏了Marc,我发现我遗漏了一些东西。在实例化表单时,我需要将请求作为参数传递。 那么这条线呢

form = TestForm()
需要改成

form = TestForm(request.form)

使申请生效。

多亏了马克,我找到了我遗漏的地方。在实例化表单时,我需要将请求作为参数传递。 那么这条线呢

form = TestForm()
需要改成

form = TestForm(request.form)

要使应用程序正常工作,TestFrom和AssetManager Form是两种不同的东西?您在哪里使用传入表单来处理任何事情,因为现在它初始化了一个新的Testform,然后您尝试验证它?尝试将form.validate()更改为request.form.validate()是的,我的意思是在任何地方替换AssetManager,使整个示例看起来更通用(现在编辑)。然而,你的问题为我指明了正确的方向。我忘了在表单构造函数中添加request.form。使用form=TestForm(request.form)解决了问题。TestFrom和AssetManager form是两种不同的东西吗?您在哪里使用传入表单来处理任何事情,因为现在它初始化了一个新的Testform,然后您尝试验证它?尝试将form.validate()更改为request.form.validate()是的,我的意思是在任何地方替换AssetManager,使整个示例看起来更通用(现在编辑)。然而,你的问题为我指明了正确的方向。我忘了在表单构造函数中添加request.form。使用form=TestForm(request.form)进行计算。