标签: wtforms

预填充 Flask-WTForm IntegerField

简单的形式:

class AdjustPWMForm(Form):
    dutyCycle = IntegerField('dutycycle')
    #dutyCycle = IntegerField('dutycycle', default=44)
Run Code Online (Sandbox Code Playgroud)

查看功能:

 def adjust():
    user = g.user
    form = AdjustPWMForm()
    form.dutyCycle.data = 55
    if form.validate_on_submit():
        dutyCycle = form.dutyCycle.data
        print('result %s', dutyCycle)
        return redirect(url_for('statusPage'))

    return render_template('adjust.html', title='Adjust PWM', user=user, form=form)
Run Code Online (Sandbox Code Playgroud)

提交表单时,无论输入什么,结果始终为 55。如果我注释掉 55 行,并使用 default=44 取消注释该行,则表单可以正常工作,但我确实需要能够设置预填充值(它将从数据库中检索)。

似乎我错过了一些非常明显的东西,但我四处寻找却无法弄清楚。

我发现在change_username有用的部分wtforms这使我:

def adjust():
    user = g.user
    form = AdjustPWMForm(dutyCycle=55)
    if form.validate_on_submit():
        dutyCycle = form.dutyCycle.data
        return redirect(url_for('statusPage'))

    return render_template('adjust.html', title='Adjust PWM', user=user, form=form)
Run Code Online (Sandbox Code Playgroud)

这是实现这一目标的最佳方式吗?

python flask wtforms flask-wtforms

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

使用 Flask-Principal 角色填​​充 WTForm MultiCheckboxField

我正在为我的 Flask 应用程序编辑用户页面,但我似乎无法弄清楚如何像处理其他变量(例如电子邮件)一样呈现用户的当前角色。

这是我的模型、形式和视图:

#Flask-Principal Role Model
class Role(db.Model, RoleMixin):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)
    description = db.Column(db.String(255))

    def __repr__(self):
        return '<Role %r>' % (self.name)

#SQLALchemy User Model
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key = True)
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    first_name = db.Column(db.String(128))
    last_name = db.Column(db.String(128))
    business_name = db.Column(db.String(128))
    active = db.Column(db.Boolean())
    roles = db.relationship('Role', secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))

#WTForms User Form
class UserForm(Form):
    first_name = StringField('first name', validators= [Required()])
    last_name = StringField('last name', …
Run Code Online (Sandbox Code Playgroud)

python jinja2 flask wtforms flask-principal

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

如何从父表单中删除字段?

我有一个用于注册用户的表格。我有另一种用于登录用户的表单。这两种形式共享通用属性,例如用户名和密码。

我试图创建一个从 RegisterForm 继承的 LoginForm,但我不知道如何删除我不需要登录的字段,例如重复密码或同意条款和条件复选框。

我怎样才能做到这一点?这些表单继承自 Form 而不是 ModelForm。

python flask wtforms flask-wtforms

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

Flask wtf.quick_form 运行一些 javascript 并设置表单变量

我正在创建博客文章,到目前为止已经使用普通的 html 表单完成了。我所做的一个有趣的想法是运行 javascript onclick 并使用页面中的额外数据在表单中设置一个隐藏变量。这很好地传递到服务器并通过 request.form 获取。现在我想使用 wtf.quick_form 来输入博客文章。qtf.quick_form 对于简单的事情非常有用,但现在我需要在单击时运行一些 JavaScript,然后设置一个表单变量。在服务器上,我需要检索此表单变量。有谁知道如何做到这一点?

作为一个例子,我尝试了这个:

{{ wtf.form_field(form.submit, button_map={'submit':'new_entry_submit_button'}) }}
{{wtf.quick_form(form)}} 
Run Code Online (Sandbox Code Playgroud)

然后像这样使用jquery来拦截提交按钮:

$(function(){        
    $('#new_entry_submit_button').bind('click', function(e) {        
        x = getSavedAndClickedAsString();
        document.getElementsByName("srcLibArticles").item(0).value =  x; <!--libArStr; -->
        return true
    });
});
Run Code Online (Sandbox Code Playgroud)

这些都不起作用,更不用说,我无法在表单中设置“隐藏”字段。我不知道如何从页面中设置表单中的字段。这一切都在幕后处理。

编辑:

我为我的表单找到了一个隐藏字段类型,因此我将我的烧瓶表单在服务器上的样子包括在内:

class NewEntry(Form):
    '''
        A form for new entries
    '''
    title = TextAreaField("Title", validators=[Required()])
    text = PageDownField("Text", validators=[Required()])
    tags = TextAreaField("Tags", validators=[Required()])
    srcLibEntries = HiddenField("srcLibEntries")
    submit = SubmitField('Submit')
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写 JavaScript,在提交时更新隐藏字段并将更新的隐藏字段发送回服务器。

Edit2:我编写了以下 html,它几乎可以工作,但仍然发生一些奇怪的事情:

<form  method="post" role="form">       
    {{ wtf.form_field(form.title) }}
    {{ wtf.form_field(form.text) }}
    {{ wtf.form_field(form.tags) …
Run Code Online (Sandbox Code Playgroud)

javascript flask wtforms

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

wtforms表单域文本放大

我是使用 wtforms 和 Flask 的新手,我正在尝试扩大物理字段的大小及其内部的字体。我应该使用一段特定的代码还是用 css 更改它。

<div class="container">
<div class="col-md-12">

    <form id="signinform" class="form form-horizontal" method="post" role="form" style="font-size:24px;">
    {{ form.hidden_tag() }}
    {{ wtf.form_errors(form, hiddens="only") }}
    {{ wtf.form_field(form.first_name, autofocus=true) }}
    {{ wtf.form_field(form.last_name) }}
    {{ wtf.form_field(form.company) }}
    {{ wtf.form_field(form.reason) }}
    {{ wtf.form_field(form.us_citizen) }}
    {{ form.signature }}
    </form>
Run Code Online (Sandbox Code Playgroud)

这就是目前的样子。我希望字段更大,打字时的字体也更大。

提前谢谢您,如果这个问题已经在其他地方得到了回答,我们深表歉意。

wtforms flask-wtforms

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

WTForms:在取消时禁用客户端验证

我要求的其实很简单。我想创建一个包含一些字段和一个提交和一个取消按钮的表单。我想使用quick_formFlask-Bootstrap的模板功能来降低模板中的开销。我的表格是这样的:

from flask_wtf import FlaskForm
from wtforms.validators import Required, Length


class SequenceForm(FlaskForm):
    name = StringField('Name:', validators=[Required(), Length(1, 128)])

    # some other fields here

    submit = SubmitField('submit')
    cancel = SubmitField('cancel')
Run Code Online (Sandbox Code Playgroud)

模板:

{% extends 'base.html' %}
{% import 'bootstrap/wtf.html' as wtf %}

{% block content %}
  <div class="container">
    <form method="POST">
      <div class="row">
        <div class="col-xs-12">
          {{ wtf.quick_form(form, button_map={'submit': 'primary'}) }}
        </div>
      </div>
    </form>
  </div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

正如人们所怀疑的那样,我想在提交时验证并接受输入值,并在取消时跳过验证。所以我的视图函数看起来像预期的那样。

@main.route('sequence/', methods=['GET', 'POST'])
def sequence(): …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-wtforms flask-bootstrap

3
推荐指数
2
解决办法
4599
查看次数

如何将 Vue.js 指令插入 WTForms Flask 表单?

我正在尝试将类似的内容插入我的网站:https ://v2.vuejs.org/v2/examples/

在他们的示例中,html 如下所示:

<div id="editor">
  <textarea :value="input" @input="update"></textarea>
  <div v-html="compiledMarkdown"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

我的烧瓶形式如下:

<form method="POST" action="{{ url_for('edit',itemid=item.id) }}" id="text-input">
    {{ form.csrf_token }}
    <div style="margin-left:30px;margin-top:20px;">
        Title: {{ form.title }}
    </div>
    <br/>
    Content: {{ form.content(cols="80", rows="50", id='larger')|safe }}
    <br/>
    Category: {{ form.category|safe }}
    <br/>
    <input type="submit" value="Save">
</form>
Run Code Online (Sandbox Code Playgroud)

所以我需要以某种方式更改该行Content: {{ form.content(cols="80", rows="50", id='larger')|safe }}以表明它正在使用 :value="input" 和 @input="update" 。我怎样才能做到这一点?我是否在服务器上的表单定义中执行此操作?或者在页面加载后使用jquery?

flask wtforms vue.js

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

如何在 WTForms 中创建单个复选框?

我在网上找到的大部分信息都是针对多个复选框的。我只想要 1。

我有:

class CategoryForm(FlaskForm):
    category = StringField('category',validators=[DataRequired()])
    checkbox = BooleanField('Private?')

@app.route('/category/<categoryid>',methods=('GET','POST'))
def category(categoryid):
    category = Category.query.get(categoryid)
    if request.method == 'POST':
        if request.form.get('category'):
            category.name = request.form['category']
            category.private = request.form['private']
            db.session.add(category)
            db.session.commit()
            return redirect(url_for('index'))

    c_form = CategoryForm()
    c_form.category.data = category.name
    return render_template('category.html',form =c_form,category=category)
Run Code Online (Sandbox Code Playgroud)

我的“类别”模板:

<form method="post">
    {{ form.hidden_tag() }}
    {{ form.checkbox }}
    <button type="submit">Go!</button>
</form>
Run Code Online (Sandbox Code Playgroud)

现在我的浏览器呈现这个:

<peewee.BooleanField object at 0x105122ad0> Go!
Run Code Online (Sandbox Code Playgroud)

显然,我希望它改为呈现复选框。我怎样才能做到这一点?我需要一个小部件吗?

flask wtforms flask-wtforms

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

IntegerField 不验证空字符串

我发现 IntegerField 在为空时不会验证。要重现,请复制以下块:

from flask import Flask, render_template_string
from flask_wtf import FlaskForm
from wtforms import IntegerField

app = Flask(__name__)
app.config['WTF_CSRF_ENABLED'] = False

class DemoForm(FlaskForm):
    demofield = IntegerField('demofield')

@app.route('/', methods=("GET","POST"))
def index():
    form = DemoForm()
    if form.validate_on_submit():
        return ("The form validated!")
    return render_template_string("<!DOCTYPE HTML> This is my form! <form method=\"post\">{% for field in form %}{{field}}{% endfor %}<input type=\"submit\">", form=form)

app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

并将其保存在自己的目录中作为 app.py。然后打开终端,cd 到目录,然后运行以下命令:

virtualenv flask
source flask/bin/activate
pip install flask flask-wtf
export FLASK_APP=app.py
python3 app.py
Run Code Online (Sandbox Code Playgroud)

在 Web 浏览器中连接到 localhost:5000。在表单字段中输入一个整数并提交将显示“表单已验证!” 在字段中输入不是整数的内容,或将字段留空 …

wtforms flask-wtforms

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

jinja2.exceptions.UndefinedError:“render_field”未定义

所以我刚刚开始Wtforms与 结合使用Flask,我设置了基本类并定义了我的所有字段,forms.py正如您在此处看到的那样......

from wtforms import Form, TextField, validators, PasswordField, DateField

class AddAccount(Form):
    username = TextField('Username', [validators.Length('min=3, max=20')])
    email = TextField('Email', [validators.Length('min=1, max=255')])
    karma = TextField('Karma', [validators.Length('min=1, max=10000000')])
    password = PasswordField('Password', [validators.Length('min=6, max=255')])
Run Code Online (Sandbox Code Playgroud)

然后我将AddAccount类导入到views.py你可以在这里看到的......

from forms import AddAccount

@app.route('/dashboard/add', methods=['POST', 'GET'])
def add_account():

    form = AddAccount(request.form)

    if request.method == 'POST' and form.validate():
        print('POST request')


    return render_template('add_account.html', form=form)
Run Code Online (Sandbox Code Playgroud)

这是模板文件...

{% extends 'layout.html' %}

{% block body %}
    <br>
    <div class="jumbotron text-center">
       <h1>Add …
Run Code Online (Sandbox Code Playgroud)

python jinja2 flask wtforms

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