标签: flask-wtforms

WTforms:错误"字段不存在"

嗨,我有一个表格类,如下所示: -

class UserCreateForm(wtf.Form):
    name=wtf.TextField('Name',validators=[validators.Required(),username_check])
    email=wtf.TextField('Email')
    userimage=wtf.FileField(u'Upload Image',validators=[checkfile])
Run Code Online (Sandbox Code Playgroud)

自定义验证器函数"checkfile"如下所示: -

def checkfile(form,field):
   if field.data:
      filename=field.data.lower()
      ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])
      if not ('.' in filename and filename.rsplit('.',1)[1] in ALLOWED_EXTENSIONS):
            raise ValidationError('Wrong Filetype, you can upload only png,jpg,jpeg,gif files')
  else:
      raise ValidationError('field not Present') # I added this justfor some debugging.
Run Code Online (Sandbox Code Playgroud)

但是我发现即使我在模板中浏览文件并单击"提交",它也总是会引发错误"字段不存在".我在这里有点困惑.field.data不是检查文件名是否存在的正确方法

python forms flask wtforms flask-wtforms

5
推荐指数
1
解决办法
2754
查看次数

使用Flask-WTForms选择性地需要字段的正确方法是什么?

我正在使用Flask与Flask-WTForms,我正在编写一个管理页面,可以更新用户的值 - 包括密码.

我正在使用我用于注册的相同表单页面,但由于不必更新密码,我不想要它.使用Flask-WTForms进行此操作的正确方法是什么?

我已经进入UserFormforms.py,我正在考虑制作一个自定义验证器,并且有一个文件级require_password选项可以覆盖默认检查.我是WTForms的新手,对Flask来说有点新鲜.

python flask wtforms flask-wtforms

5
推荐指数
1
解决办法
1837
查看次数

Flask-WTF使用input = submit而不是button type = submit

我想要使​​用Flask的"SubmitField"

<button type="submit" title="Save this form"><span>Save</span></button>
Run Code Online (Sandbox Code Playgroud)

代替:

<input type="submit" title="Save this form" />
Run Code Online (Sandbox Code Playgroud)

我在模板中打印出来:

{{ field(class=css_class, title=field.description, **kwargs) }}
Run Code Online (Sandbox Code Playgroud)

我猜我必须以某种方式修改SubmitInput(SubmitField背后的小部件),但我不确定如何做到这一点,我是否必须修改__html __()?

编辑:

from flask.ext.wtf import Required, Length, EqualTo, Field, TextInput
from flask import Markup
class InlineButtonWidget(object):
    html = """
    <button type="submit" title="%s"><span>%s</span></button>
    """

    def __init__(self, input_type='submit'):
        self.input_type = input_type

    def __call__(self, field, **kwargs):
        kwargs.setdefault('id', field.id)
        kwargs.setdefault('type', self.input_type)
        if 'value' not in kwargs:
            kwargs['value'] = field._value()
        return HTMLString(self.html % (field.name, field.label ))


class InlineButton(Field):
  widget = InlineButtonWidget()
  def _value(self):
    if self.data: …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-wtforms

5
推荐指数
1
解决办法
6296
查看次数

Flask-WTForms:如何检查是否需要字段?

我用以下方式定义了一个表单:

class LoginForm(Form):
    login = EmailField(u'Email address', [required(), length(min=5, max=2048), validators.Email()])
    password = PasswordField(u'Password', [required(), length(min=6, max=50)])
    next = HiddenField()
    remember = BooleanField('Remember me')
    submit = SubmitField('Login')
Run Code Online (Sandbox Code Playgroud)

然后我在Jinja2中编写一个通用宏来渲染表单字段,我想做的事情如下:

{% if field.is_required() %}
  {{ field.label(class_='required') }}
{% else %}
  {{ field.label() }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

那么......有没有办法看看是否需要一个字段?

python templates jinja2 flask flask-wtforms

5
推荐指数
1
解决办法
3655
查看次数

Flask-WTForms为IntegerField抛出错误而不是验证失败

当我使用wtf_forms和Flask-WTF创建表单并使用IntegerField输入时,我不能将它与Length验证器结合使用

如果我删除长度限制,那么它工作正常.当然我应该能够对IntegerField应用长度验证吗?

Python代码.

from flask_wtf import Form
from wtforms import TextField, PasswordField, IntegerField, validators

class RegistrationForm(Form):
    firstname = TextField('First Name', [validators.Required()])
    lastname = TextField('Last Name', [validators.Required()])
    telephone = IntegerField('Telephone', [validators.Length(min=10, max=10, message="Telephone should be 10 digits (no spaces)")])

TypeError
TypeError: object of type 'int' has no len()

Traceback (most recent call last)
File "C:\Python27\lib\site-packages\flask\app.py", line 1701, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Python27\lib\site-packages\flask\app.py", line 1689, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "C:\Python27\lib\site-packages\flask\app.py", line 1687, in wsgi_app
response = self.full_dispatch_request()
File …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-wtforms

5
推荐指数
1
解决办法
1万
查看次数

WTForms SelectField没有正确地强制执行布尔值

这是我的代码:

class ChangeOfficialForm(Form):
    is_official = SelectField(
        'Officially Approved',
        choices=[(True, 'Yes'), (False, 'No')],
        validators=[DataRequired()],
        coerce=bool
    )
    submit = SubmitField('Update status')
Run Code Online (Sandbox Code Playgroud)

出于某种原因,is_official.data总是如此True.我怀疑我误解了胁迫是如何起作用的.

python flask wtforms flask-wtforms

5
推荐指数
1
解决办法
1521
查看次数

Bootstrap和水平单选按钮

我正在尝试使用Bootstrap-CSS和水平显示单选按钮Flask-WTForms.据我所知,我需要使用Bootstrap类class_="radio-inline"来实现这一目标.我试过了,我得到的就是这个:

在此输入图像描述

其中,单选按钮是垂直组织的,令人沮丧.

Flask WTForm代码:

from flask.ext.wtf import Form
import csv
import os
import buildHome as bh
from wtforms import TextField, RadioField, TextAreaField, SubmitField, validators, BooleanField

class ContactForm(Form):

    firstName = TextField("First name",  [validators.Required("Please enter your first name.")])
    lastName = TextField("Last name",  [validators.Required("Please enter your last name.")])
    #name = TextField("Name",  [validators.Required("Please enter your name.")])
    email = TextField("Email",  [validators.Required("Please enter your email address."), validators.Email("Please enter your email address.")])

    node_1 = BooleanField("Joan Johnson (Buckridge Inc)")
    direction_1 = RadioField('', …
Run Code Online (Sandbox Code Playgroud)

flask wtforms flask-wtforms twitter-bootstrap-3

5
推荐指数
1
解决办法
3949
查看次数

如何在WTForms中使用"tel","number"或其他输入类型?

我想在表单中使用电话号码字段.我需要的是在Android手机上点击此字段,而不是普通键盘,但仅显示数字.

我了解到这可以通过使用<input type="tel"或实现<input type="number".

如何在WTForms中使用tel或number输入类型?

python flask wtforms flask-wtforms

5
推荐指数
1
解决办法
3324
查看次数

如何在UI状态更改时更新wtf-form状态?

到目前为止,我的流程是使用WTF表单并根据用户活动更新其状态:

在我的template.html中,我有:

<form action="{{ url_for('page') }}" method="POST">
    <select id="sel_id" name="name1" onchange="this.form.submit();">
    ...
    </select>
</form>
Run Code Online (Sandbox Code Playgroud)

......在views.py中我得到了:

@app.route('/')
@app.route('/process', methods=['GET', 'POST'])
def process():
    form = NoNameForm()
    if request.method == 'POST':
        if 'name1' in request.form:                        
            form.colors = int(request.form['name1'])
Run Code Online (Sandbox Code Playgroud)

这是使用WTF表单和更新变量的正确方法,例如form.colors在这种情况下吗?我想知道我是否可以form.colors直接在" onchange"js代码中更新.

html flask flask-wtforms

5
推荐指数
1
解决办法
205
查看次数

动态选择WTForms Flask SelectField

我正在尝试使用FlaskForms将userID变量传递给WTForms.首先,我将展示工作正常的代码,然后我需要修改的代码(我不知道如何部分).我正在添加与某个组关联的新名称.

FlaskForm模型:

class AddName(FlaskForm):
    name =StringField('Device name', validators=[InputRequired(),Length(min=4, max=30)])
    groupID = SelectField('Payload Type', choices=[(1,"Group1"),(2,"Group2")], validators=[InputRequired])
Run Code Online (Sandbox Code Playgroud)

查看型号:

@app.route('/dashboard/addname', methods=['GET', 'POST'])
def addname():
    form=AddName()
    if form.validate_on_submit():
        name=Name(form.name.data,form.groupID.data)
        db.session.add(name)
        db.session.commit()
        return "New name added"
Run Code Online (Sandbox Code Playgroud)

模板:

              <form method="POST" action="/dashboard/addname">
                  <h2>Add name</h2>
                  {{ form.hidden_tag() }}
                  {{ wtf.form_field(form.name) }}
                  {{ wtf.form_field(form.groupID) }}
                  <button type="submit">Add name</button>
              </form>
Run Code Online (Sandbox Code Playgroud)

我在下拉列表中看到了正确的列表,并在提交时给出了正确的数字.

任务:我需要根据current_user.userID传递不同的列表.我正在使用SQLAlchemy构建列表,通过从DB中的表进行查询,因此My Flask视图是:

@app.route('/dashboard/addname', methods=['GET', 'POST'])
def addname():
    available_groups=db.session.query(Groups).filter(Groups.userID == currend_user.userID).all()
    #Now forming the list of tuples, so it's ok for SelectField
    groups_list=[(i.groupID, i.groupName) for i in …
Run Code Online (Sandbox Code Playgroud)

python flask flask-wtforms

5
推荐指数
1
解决办法
8760
查看次数