标签: wtforms

wtforms自定义验证器可以使字段可选吗?

如果选中复选框,我正在使用自定义验证器来检查字段是否为空.它检查正确,但无论它是否总是在验证值是否为数字.

基本上我需要一个字段来停止在表单的某些条件下进行验证.

有没有办法让自定义验证器停止对该字段的验证?

python flask wtforms

8
推荐指数
1
解决办法
6692
查看次数

WTForms:同一页面上的两个表单?

我有一个动态网页,应该处理两种形式:登录表单注册表单.我正在使用WTForms来处理这两种形式,但是我在使它工作时遇到了一些麻烦,因为两种形式都被渲染到同一页面.

以下是我的网页登录表单的代码:

PYTHON:
class Login(Form):
    login_user = TextField('Username', [validators.Required()])
    login_pass = PasswordField('Password', [validators.Required()])

@application.route('/index', methods=('GET', 'POST'))
def index():
    l_form = Login(request.form, prefix="login-form")
    if request.method == 'POST' and l_form.validate():
        check_login = cursor.execute("SELECT * FROM users WHERE username = '%s' AND pwd = '%s'"
        % (l_form.login_user.data, hashlib.sha1(l_form.login_pass.data).hexdigest()))
        if check_login == True:
            conn.commit()
            return redirect(url_for('me'))
    return render_template('index.html', lform=l_form)


HTML:
<form name="lform" method="post" action="/index">
    {{ lform.login_user }}
    {{ lform.login_pass }}
    <input type="submit" value="Login" />
</form>
Run Code Online (Sandbox Code Playgroud)

以下是我的网页注册表格的代码: …

python forms flask wtforms flask-wtforms

8
推荐指数
1
解决办法
9746
查看次数

使用Flask,WTForm,SQLAlchemy和Jinja2的完整多对一示例

这是我的HTML下拉菜单.该值是子表的主键.

<select id="category" name="category">
   <option selected value="__None"></option>
   <option value="1">Category Number One</option>
   <option value="2">Category Number Two</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我需要使用值整数1而不是"类别编号一"更新Post.category_id.这是我的代码.

# create new post
@app.route('/admin/post', methods=['GET', 'POST'])
@login_required # Required for Flask-Security
def create_post():
    form = PostForm()
    if form.validate_on_submit():
        post = Post(title=form.title.data,
                    body=form.body.data,
                    pub_date=form.pub_date.data,
                    cateogry_id=form.category.data)
        db.session.add(post)
        db.session.commit()
        flash('Your post has been published.')
        return redirect(url_for('admin'))
    posts = Post.query.all()
    return render_template('create_post.html', form=form, posts=posts)
Run Code Online (Sandbox Code Playgroud)

我试过制作......

cateogry_id=form.category.data
cateogry_id=form.category.value
Run Code Online (Sandbox Code Playgroud)

现在不是那么好!

python flask wtforms flask-sqlalchemy flask-wtforms

8
推荐指数
1
解决办法
8233
查看次数

使用Flask-WTForms,我如何设置html的表单部分的样式?

我通过Flask-WTF非常简化的wiki阅读,并且无法理解我能用它做什么.我的印象是<form>html 的部分现在只能看起来像

<form method="post">
    {{ form.hidden_tag() }}
    {{ form.name }}
    <input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

但我真的想要使用物化的样式,例如:

        <div class="row">
            <div class="input-field col s6">
                <i class="material-icons prefix">account_circle</i>
                <input value="FN" id="first_name" type="text" class="validate">
                <label class="active" for="first_name">First Name</label>
            </div>
            <div class="input-field col s6">
                <input value="LN" id="last_name" type="text" class="validate">
                <label class="active" for="last_name">Last Name</label>
            </div>
        </div>
Run Code Online (Sandbox Code Playgroud)

我在哪里能适应{{ form.first_name }}{{ form.last_name }}进入?

编辑:让我详细说明我的答案:例如,我想要像Materialized datepicker(一个很好的弹出日历,让用户选择日期),这应该在<input class='datepicker' length="50">,但现在我正在替换整<input>行与{{ form.date }}...我失去了编辑课程的特权,但没有.

python flask wtforms flask-wtforms

8
推荐指数
2
解决办法
9999
查看次数

使用flask + wtform渲染表单

有问题的代码:

from flask import Blueprint, render_template, abort
from flask.ext.wtf import Form
import os
from jinja2 import TemplateNotFound
from models import Member
from wtforms.ext.sqlalchemy.orm import model_form
@simple_page.route('/register')
def register():
    form = model_form(Member, Form)
    return render_template('register.html', form=form, name="bad")


class Member(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    email = db.Column(db.String(50), nullable=False, unique=True)
Run Code Online (Sandbox Code Playgroud)

在我看来:

        <p class="txt11 colorb">
        {{ form.name }}
        </p>
Run Code Online (Sandbox Code Playgroud)

这个输出<UnboundField(TextField, (), {u'default': None, u'filters': [], u'validators': [<wtforms.validators.Required object at 0x7f62f59b5590>, <wtforms.validators.Length object at 0x7f62f59b55d0>]})>,而不是实际的领域.如何使用wtform获得实际的表单/字段?

python flask wtforms

7
推荐指数
2
解决办法
2万
查看次数

如何使用Flask/WTForms预先填充复选框

我正在尝试生成一个动态复选框列表,其中根据数据状态检查某些框.

这是我的表格:

class FooForm(Form):
    bar = SelectMultipleField(
        'Bar',
        option_widget=CheckboxInput(),
        widget=ListWidget(prefix_label=True))
Run Code Online (Sandbox Code Playgroud)

这是控制器:

@app.route('/fooform', methods = ['GET','POST'])
def foo():
    foos = foo_dao.find() 
    form = FooForm()
    form.bar.choices = [(foo.id, foo.label) for foo in foos]
    # SOMEHOW PRE-POPULATE CHECKBOXES HERE
    if form.is_submitted():
        # DO STUFF
    return render_template('foo.html', 
                           foos=foos,
                           form=form)
Run Code Online (Sandbox Code Playgroud)

这是模板:

  <form action="" method="post" name="foos">
      {{form.bar}}
    <p><input type="submit" value="Add"></p>
  </form>
Run Code Online (Sandbox Code Playgroud)

这会生成一个复选框列表,但它可以工作,但我无法弄清楚如何指定列表中的哪些复选框要预先填充.

python flask wtforms

7
推荐指数
3
解决办法
7620
查看次数

从Fields数据中获取None而不是空字符串

我在WTForms表格中有这个字段

name = StringField('Name', validators = [Optional(), Length(max = 100)])
Run Code Online (Sandbox Code Playgroud)

当字段提交为空form.name.data时,将按预期包含空字符串.

有没有办法让它返回None而不是空字符串?这只是因为null在数据库中处理非常方便,如下所示update:

update t
set 
    name = coalesce(%(name)s, name),
    other = coalesce(%(other)s, other)
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,我不需要检查字段是否为空,并在SQL代码中的Python代码中采取相应的操作.在nullcoalesce解决了容易.

python wtforms flask-wtforms

7
推荐指数
1
解决办法
4143
查看次数

在WTForms中使用自定义属性创建选择域选项

我正在尝试创建一个SelectFieldSelectMultipleField允许我为其<option>标签添加属性.我试图添加像data-id或其他的属性data-____.我无法弄清楚如何做到这一点,因为它似乎只能为<select>标签本身而不是选项添加属性.
最终结果应该是这样的:

<select id="regularstuff-here" name="regular-name-here">
  <option value="1" data-id="somedata here" >Some Name here</option>
  <option value="2" data-id="somedata here" >Some Name here</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我假设我必须创建一个自定义小部件.如果我查看WTForms的源代码,我会看到该select小部件调用:

html.append(self.render_option(val, label, selected))
Run Code Online (Sandbox Code Playgroud)

如果我看一下这个方法:

@classmethod
def render_option(cls, value, label, selected, **kwargs):
    options = dict(kwargs, value=value)
    if selected:
        options['selected'] = True
    return HTMLString('<option %s>%s</option>' % (html_params(**options), 
             escape(text_type(label))))
Run Code Online (Sandbox Code Playgroud)

因此,似乎您不能将任何额外的参数传递给呈现option标记的方法.

python flask wtforms

7
推荐指数
2
解决办法
2889
查看次数

如何从WTForms表单自动生成完整的HTML

我正在尝试使用Jinja2模板为SQLAlchemy应用程序创建一个简单的基于WTForms的管理界面。

我已经阅读了WTForms-Alchemy文档,并且我了解它可以通过几行代码从我的模型自动生成表单,例如:

class UserForm(ModelForm):
    class Meta:
        model = User
Run Code Online (Sandbox Code Playgroud)

我的问题是,即使我自动生成了此表单,也找不到任何有关如何将其转换为功能HTML页面的资源。有一些有关字段呈现错误的摘要,还有一些SO答案提到了用于呈现整个字段的宏,但是我发现关于如何自动生成完整的功能形式的资源绝对没有。

//我知道这是Flask-Admin可能已经做的事情,我没有使用Flask,因此不幸的是这是不可能的。

python sqlalchemy jinja2 wtforms

7
推荐指数
1
解决办法
2191
查看次数

Flask WTForms Integerfield 类型是文本而不是数字

这是我尝试过的:

nrkomp = IntegerField('Number',validators=[NumberRange(min=1, max=5, message='Invalid length')])
Run Code Online (Sandbox Code Playgroud)

在开发人员工具中,此表单输入类型为文本而不是数字,我已阅读文档,但找不到解决此问题的方法。

python flask wtforms

7
推荐指数
1
解决办法
4983
查看次数