我正在使用 WTForms。我正在对文件上传应用验证,并将其限制为仅 jpg、png 和 pdf 格式。但是,如果我输入不正确,则不会出现错误消息。
我遵循了本教程 https://flask-wtf.readthedocs.io/en/stable/form.html
photo = FileField('photo', validators=[
FileRequired(),
FileAllowed(['png', 'pdf', 'jpg'], "wrong format!")
])
Run Code Online (Sandbox Code Playgroud) 我正在创建一个小型企业门户网站。将会有一个计算机数据库,其中包含有关公司中所有计算机的信息。我正在创建一个 WTForm 用于编辑计算机的属性。我有一个页面,其中包含包含计算机属性的表格。每行都有特殊的按钮。当用户按下其中一个时,我想显示一个带有从数据库获取默认值的表单的页面。当我在视图函数中编辑默认值时,出现错误:
\n\nThe CSRF token is missing.\nRun Code Online (Sandbox Code Playgroud)\n\n我的查看功能:
\n\ndef edit_computer(computer_id):\n if admin_can() or sysadmin_can():\n computer = models.Computer.query.filter_by(id=computer_id).one()\n user = models.User.query.filter_by(id=computer.user_id).one()\n email = user.email\n\n form = forms.EditComputerForm()\n form.email.default = user.email\n form.type_.default=computer.type_\n form.model.default = computer.model\n form.cpu.default = computer.cpu\n form.ram.default = computer.ram\n form.rom.default = computer.rom\n form.os.default = computer.os\n form.supplements.default = computer.supplements\n form.process()\n\n if form.validate_on_submit():\n ...\nRun Code Online (Sandbox Code Playgroud)\n\n当我不设置默认值时(删除此 \xe2\x86\x93),代码工作正常
\n\nform.email.default = user.email\nform.type_.default=computer.type_\nform.model.default = computer.model\nform.cpu.default = computer.cpu\nform.ram.default = computer.ram\nform.rom.default = computer.rom\nform.os.default = computer.os\nform.supplements.default = computer.supplements\nform.process()\nRun Code Online (Sandbox Code Playgroud)\n\n形式:
\n\nclass EditComputerForm(FlaskForm): …Run Code Online (Sandbox Code Playgroud) 我正在寻找 wtforms 的 SelectField 和 Textfield 之间的混合,其中可以输入一个经过验证并从给定选项列表自动完成的字符串,例如 SearchField 中的选择参数。
目前我有这个实现,它只是一个下拉菜单,但我希望用户能够输入任何字符串。输入字符串时,所有匹配选项都应显示在下拉列表中,就像谷歌搜索栏中一样。
possible_names = {0:'hans', 1:'sepp', 3:'max'}
class ReusableForm(Form):
name = SelectField("Enter a Name",
choices=[(uuid, name) for uuid, name in possible_names.items()],
validators=[validators.InputRequired()])
Run Code Online (Sandbox Code Playgroud) 我正在创建一个 Flask 表单,我需要在 Flask 中显示基于其他一些下拉选择字段的下拉列表。我可以用 HTML 做到这一点,但发现很难在 Flask 形式中做到同样的事情。
路线.py:
class RegistrationForm(FlaskForm):
category = SelectField('Category', choices = [('Clothes', 'Clothes'), ('Watch', 'Watch')])
subcategory = SelectField('Sub Category', choices = [('USPA', 'USPA'), ('LEE', 'LEE'), ('FOSSIL', 'FOSSIL'), ('TITAN', 'TITAN')])
submit = SubmitField('Register')
Run Code Online (Sandbox Code Playgroud)
HTML:
<form action="" method="post">
{{ form.hidden_tag() }}
<p>
<p>
{{ form.category.label }}<br>
{{ form.category }}<br>
{% for error in form.category.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form.subcategory.label }}<br>
{{ form.subcategory }}<br>
{% for error in form.subcategory.errors …Run Code Online (Sandbox Code Playgroud) 我如何比较烧瓶中的两个密码?我需要在哪里这样做:在课堂上还是在request.method ==“POST”中?谢谢!
class ContactForm(FlaskForm):
email = StringField(label='E-mail', validators=[
validators.Length(min=5, max=35), validators.Email()
])
password = StringField(label='Password', validators=[
validators.Length(min=6, max=10)
])
password_confirm = StringField(label='Password confirm', validators=[
validators.Length(min=6, max=10)
])
def validate_name(form, field):
if len(field.password.data) != len(field.password_confirm.data):
raise ValidationError('Passwords must be equal')
Run Code Online (Sandbox Code Playgroud) 我花了几天时间试图让 WTForms 来验证我的request.args,但我就是无法form.validate()返回True。
我的想法是,我有一个简单的文本字段,用于 WTForm 中的用户输入,如下所示。
表格.py
class SearchForm(FlaskForm):
q = StringField('q',
validators=[])
search = SubmitField('Search')
def validate_q(self, q):
if q.data not in allowed_values: #"allowed_values" is just a list I want to check against
raise ValidationError('')
Run Code Online (Sandbox Code Playgroud)
搜索.html
<form method="GET" action="{{ url_for('finance.search') }}">
<div class="col-9 col-md-5 p-0 m-0">
{% if form.q.errors %} {{ form.q(class="form-control form-control-md is-invalid") }}
<div class="invalid-feedback">
{% for error in form.q.errors %}
<span>{{ error }}</span> {% endfor %}
</div>
{% else %} …Run Code Online (Sandbox Code Playgroud) I'm working on an app with Vue frontend and Flask backend.
I am writing my forms in Vue but I'm trying to use FlaskWTF for CSRF/XSRF security and for form validation on the back-end.
I've wrapped my app in CSRFProtect() as they say to do in the FlaskWTF docs, if using AJAX.
from flask_wtf.csrf import CSRFProtect
app = build_app()
csrf = CSRFProtect(app)
Run Code Online (Sandbox Code Playgroud)
But I'm stuck on how to send over the CSRF token in a form that is readable …
我正在尝试使用 Flask-WTForm 的 FileField 上传图片。但即使我上传了图片,它也无法检测到。
表单创建为:
class User_settings_profile_picture_form(FlaskForm):
picture = FileField('Update profile picture', validators=[DataRequired(), FileAllowed(['jpg', 'png', 'jpeg', 'gif'])])
submit = SubmitField('Update')
Run Code Online (Sandbox Code Playgroud)
使用该表单的路线如下:
profile_pic_form = User_settings_profile_picture_form()
.
.
.
if profile_pic_form.validate_on_submit():
if profile_pic_form.picture.data:
...
else:
#for debugging purposes
print("Is valid: " + profile_pic_form.validate())
print("Errors: " + profile_pic_form.errors)
print("Request files: " + request.files)
Run Code Online (Sandbox Code Playgroud)
这些print语句用于调试目的,在控制台中它类似于:
Is valid: False
Errors: {'picture': ['This field is required.']}
Request files: ImmutableMultiDict([])
Run Code Online (Sandbox Code Playgroud)
html 看起来像:
<form method="POST" action="">
{{ profile_pic_form.hidden_tag() }}
<div class="mb-3">
<h3>Profile Picture</h3>
{{ …Run Code Online (Sandbox Code Playgroud) 我已经看到大量的教程显示带有flask和flash-wtf的登录表单,但是没有从数据库表值中填充多个选择框的教程.
这就是我想要做的:
简单的注册表格:
名字
姓
地址第一行
地址第2行
市
状态ID(从Id,state的状态库查询填充)
国家/地区ID(从国家/地区库中查询国家/地区,ID)
我们将非常感谢示例代码或指向漫游的链接.
我已经反复阅读文档,并且当联系页面尝试使用带有wtforms的Recaptcha加载Flask时,仍然会收到'RuntimeError:RECAPTCHA_PUBLIC_KEY config not set'.我愿意接受任何建议.我使用Google的ReCaptcha 2,FWIW在Ubuntu 14.04上运行Flask.
编辑:此问题已通过dirn的建议解决,但我现在收到KeyError消息,尽管正确输入了公钥和私钥.
这是我的堆栈跟踪.
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__return self.wsgi_app(environ, start_response)
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/matt/work/bsureunion/run.py", …Run Code Online (Sandbox Code Playgroud) flask ×10
flask-wtforms ×10
python ×8
wtforms ×7
python-3.x ×2
filefield ×1
html ×1
javascript ×1
python-2.7 ×1
recaptcha ×1
validation ×1
vue.js ×1