标签: flask-wtforms

FileAllowed 不显示错误消息

我正在使用 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)

python flask wtforms flask-wtforms

3
推荐指数
1
解决办法
3426
查看次数

如何修复 Flask-WTForms 中的“CSRF 令牌丢失”

我正在创建一个小型企业门户网站。将会有一个计算机数据库,其中包含有关公司中所有计算机的信息。我正在创建一个 WTForm 用于编辑计算机的属性。我有一个页面,其中包含包含计算机属性的表格。每行都有特殊的按钮。当用户按下其中一个时,我想显示一个带有从数据库获取默认值的表单的页面。当我在视图函数中编辑默认值时,出现错误:

\n\n
The CSRF token is missing.\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的查看功能:

\n\n
def 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            ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我不设置默认值时(删除此 \xe2\x86\x93),代码工作正常

\n\n
form.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()\n
Run Code Online (Sandbox Code Playgroud)\n\n

形式:

\n\n
class EditComputerForm(FlaskForm): …
Run Code Online (Sandbox Code Playgroud)

python flask python-3.x wtforms flask-wtforms

3
推荐指数
1
解决办法
722
查看次数

wtforms TextField/SearchField 具有 Flask 应用程序的自动完成功能(类似于 google 搜索栏)

我正在寻找 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)

python flask wtforms flask-wtforms

3
推荐指数
1
解决办法
5020
查看次数

根据烧瓶中的其他一些选择选项显示选择字段

我正在创建一个 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)

cascadingdropdown flask python-3.x flask-wtforms

3
推荐指数
1
解决办法
8175
查看次数

如何比较烧瓶中的两个密码

我如何比较烧瓶中的两个密码?我需要在哪里这样做:在课堂上还是在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)

python validation flask wtforms flask-wtforms

3
推荐指数
1
解决办法
4958
查看次数

在 Flask 中使用 WTForms 验证 GET 参数

我花了几天时间试图让 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)

html python flask wtforms flask-wtforms

3
推荐指数
1
解决办法
1513
查看次数

FlaskWTF how to send CSRF token to Vue front-end

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 …

javascript python flask flask-wtforms vue.js

3
推荐指数
1
解决办法
2197
查看次数

Flask-WTForm FileField 返回 None 而不是上传的文件

我正在尝试使用 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)

python filefield flask wtforms flask-wtforms

3
推荐指数
1
解决办法
1425
查看次数

使用多个表中的选择创建烧瓶表单

我已经看到大量的教程显示带有flask和flash-wtf的登录表单,但是没有从数据库表值中填充多个选择框的教程.

这就是我想要做的:

简单的注册表格:

名字

地址第一行

地址第2行

状态ID(从Id,state的状态库查询填充)

国家/地区ID(从国家/地区库中查询国家/地区,ID)

我们将非常感谢示例代码或指向漫游的链接.

flask python-2.7 flask-wtforms

2
推荐指数
1
解决办法
4776
查看次数

RECAPTCHA_PUBLIC_KEY配置未使用Flask-WTForms设置

我已经反复阅读文档,并且当联系页面尝试使用带有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)

python recaptcha flask wtforms flask-wtforms

2
推荐指数
1
解决办法
2090
查看次数