Python 为什么StringField总是没有?
我正在尝试使用Flask、WTForms和通过Flask引导提供的宏来读取表单。这种方法在某些情况下有效,而在其他情况下——看起来很相似——则不起作用。当我检查特定StringField的内容时,它的计算结果总是为None,导致InputRequired()验证失败 forms.py: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=
{% 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">×</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">×</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">×</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)进行计算。