python - 即使存在 {{ form.hidden_tag() }},Flask-WTForms 也不会验证
问题描述
我已经给出了我的forms.py
,routes.py
和createPatient.html
(相关截图) 的片段。我以前有一个登录同一个应用程序的表单,我遇到了同样的错误,我删除了旧项目并启动了这个新项目。
路线.py
@app.route("/createPatient",methods=['GET','POST'])
def create():
form1 = createPatient(request.form)
if form1.validate_on_submit():
print("Sucess")
return redirect('/index')
else:
print("Unsuccessful")
return render_template("createPatient.html", form = form1)
当我输入时的输出form1.validate()
是false
并且form1.errors
是{}
并且打印不成功
表格.py
class createPatient(FlaskForm):
ssn_id = IntegerField("SSN ID", validators = [DataRequired()])
name = StringField("Patient Name",validators=[DataRequired()])
age = IntegerField("Patient Age",validators=[DataRequired()])
doa = DateField("Date of Admission",validators=[DataRequired()])
tob = SelectField("Type of Bed", choices = [('General Ward'),('Semi Sharing'),('Single Room')],validators =[DataRequired()])
address = StringField("Address", validators=[DataRequired()])
city = StringField("City", validators=[DataRequired(), Length(min = 6 ,max = 20)])
state = StringField("State", validators=[DataRequired(), Length(max = 30)])
create = SubmitField("Create Patient")
上述文件中没有语法错误
createPatient.html
<form name = "createPatient" action= "/createPatient" method="POST" >
{{ form.hidden_tag() }}
<p>
{{ form.ssn_id.label }}
{{ form.ssn_id(size = 9 ) }}
{% for error in form.ssn_id.errors %}
<span class="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
<p>
{{ form.name.label }}
{{ form.name(size = 35 ) }}
{% for error in form.name.errors %}
<span class="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
<p>
{{ form.age.label }}
{{ form.age(size = 35 ) }}
{% for error in form.age.errors %}
<span class="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
<p>
{{ form.doa.label }}
{{ form.doa(size = 35 ) }}
{% for error in form.doa.errors %}
<span class="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
{{ form.tob.label }}
{{ form.tob() }}
{% for error in form.tob.errors %}
<span class="error-message">*{{ error }}</span>
{% endfor %}<br>
<p>
{{ form.address.label }}
{{ form.address(size = 35 ) }}
{% for error in form.address.errors %}
<span clas="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
<p>
{{ form.city.label }}
{{ form.city(size = 35 ) }}
{% for error in form.city.errors %}
<span clas="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
<p>
{{ form.state.label }}
{{ form.state(size = 35 ) }}
{% for error in form.state.errors %}
<span clas="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
<p> {{ form.create ()}} </p>
</form>
配置文件
import os
class Config(object):
SECRET_KEY = os.urandom(32)
初始化.py
from flask import Flask
from config import Config
from flask_mongoengine import MongoEngine
app =Flask(__name__)
app['SECRET_KEY']= Config.SECRET_KEY
解决方案
据我所知,CSRF 令牌是使用SECRET_KEY
. 在您的config.py文件中,我看到了SECRET_KEY = os.urandom(32)
. 每次重新加载应用程序时,您的密钥都会被新密钥替换。这可能会导致 CSRF 错误。
而是尝试在外部生成密钥并将其放在 .env 或 config.py 中:
SECRET_KEY = 'super-secret-random-key'
或者
import os
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY')
推荐阅读
- html - CSS Hover - 不适用于某些元素
- angular - 用验证器包装角反应形式组件
- python - 在python中匹配来自WhatsApp登录的消息
- amazon-web-services - 在 S3 + Cloudfront 上以相同的 URL 托管多个 SPA Web 应用程序
- javascript - javascript:当键模式被另一个数组保存时,如何为多维数组赋值
- python-3.x - 从 selenium webdriver 中一一获取元素
- omnet++ - 连接多个消息内容时出错 omnet++
- javascript - 简单使用“必需”属性,但也验证表单(排除“@”)
- java - 为什么java允许在匿名内部类中重新分配类级变量,而局部变量则不允许
- c# - 在公共属性上相交两个对象列表,然后比较不同的属性