标签: 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
查看次数

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

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

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-wtf selectField选项无效

我做了一个像这样的SelectField:

# constants.py
QUESTION_LIST = {}
QUESTION_LIST['QuestionOne'] = { 'disagree-strong': "Strongly Disagree", 'agree-strong': "Strongly Agree" }

#forms.py
from constants import *
typeone = SelectField('QuestionOne', 
      choices=QUESTION_LIST['QuestionOne'].iteritems(), 
      description='Answer the question')
Run Code Online (Sandbox Code Playgroud)

因此,当您加载页面时,它会显示选项.我选择了这个选项,然后按"提交"并显示"这不是一个有效的选择",它会清除选择字段.

然后,当您刷新页面时,就好像代码被破坏而且它不再显示选择......这是一个空的下拉/选择字段.

我究竟做错了什么?

编辑:出于某种原因,当你把iteritems放在视图而不是表单时,一切正常.Flask-WTF的某种怪癖,如果你不使用他们的格式,它似乎在你提交表格后删除了选择.

python dictionary flask wtforms

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

将会话数据从Flask传递到WTForms

因此,我在将Flask会话对象的列表传递到正在使用的WTForms中时遇到问题。我正在尝试访问会话对象内的“策略”对象(这是一个列表)。

目标是列出与当前用户关联的所有策略。

在Flask应用中:

class Create_Indicator_Form(Form):
    security = TextField('Ticker Name', [
                         validators.Required(),
                         validators.Length(min=1, max=6)])
    mva_10 = BooleanField('10 day moving average')
    mva_25 = BooleanField('25 day moving average')
    strategy = SelectField('strategy', session['strategy'])
    def validate_mva_10(form, field):
        if form.mva_25.data is True and field.data is True:
            raise ValidationError('You can only choose one reference')
        if form.mva_25.data is False and field.data is False:
            raise ValidationError('You must choose at least one reference')

@app.route('/create_indicator', methods=['GET', 'POST'])
def create_indicator():
    check_if_logged_in()
    f = request.form
    create_indicator_form = Create_Indicator_Form(f)
    if request.method == 'POST' and …
Run Code Online (Sandbox Code Playgroud)

python session flask wtforms

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

在Jinja模板中渲染WTForms CheckboxInput

我似乎无法弄清楚如何CheckboxInput在我的模板中渲染WTForms .当我尝试使用我的Jinja模板中的Flask渲染字段时,我收到此错误:

TypeError:call()只需要2个参数(给定1个)

该错误与{{ form.prefs(value='n') }}我的模板中使用的方式有关.WTForms文档中CheckBoxInput说"默认情况下,value = HTML属性为'y',除非在渲染时由value =另行指定." 无论是否指定值,我都会收到错误.

我似乎无法找到如何呈现简单的CheckBoxInput的示例.任何帮助表示赞赏.

这是我的表格:

class PreferencesForm(Form):
    prefs = widgets.CheckboxInput()
Run Code Online (Sandbox Code Playgroud)

这是我的模板:

{% extends "base.html" %}

{% block content %}

<form method="POST" action="/user/prefs/">
    <div>{{ form.prefs(value='n') }}</div>
    <button type="submit" class="btn">Submit</button>    
</form>

{% endblock %}
Run Code Online (Sandbox Code Playgroud)

jinja2 flask wtforms flask-wtforms

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

WTForms StringField写入Postgres时发生编程错误

我的数据库是Postgres实例。我的模型定义为:

from app import db
class Device(db.Model):
    __tablename__ = 'device'

    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String())
Run Code Online (Sandbox Code Playgroud)

我的来源定义为:

from flask_wtf import FlaskForm
from wtforms import StringField

class EditDevices(FlaskForm):
    device_name = StringField("Device Name", validators=[])
    submit = SubmitField['Submit']
Run Code Online (Sandbox Code Playgroud)

我收到以下形式的错误:

    sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'StringField' [SQL: 'UPDATE device SET name=%(name)s WHERE device.id = %(device_id)s'] [parameters: {'name':  <wtforms.fields.core.StringField object at 0x110580c18>, 'device_id': 208}]
Run Code Online (Sandbox Code Playgroud)

任何想法,我要去哪里错了?

postgresql flask wtforms flask-wtforms

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