简单的形式:
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)
这是实现这一目标的最佳方式吗?
我正在为我的 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) 我有一个用于注册用户的表格。我有另一种用于登录用户的表单。这两种形式共享通用属性,例如用户名和密码。
我试图创建一个从 RegisterForm 继承的 LoginForm,但我不知道如何删除我不需要登录的字段,例如重复密码或同意条款和条件复选框。
我怎样才能做到这一点?这些表单继承自 Form 而不是 ModelForm。
我正在创建博客文章,到目前为止已经使用普通的 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) 我是使用 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)
提前谢谢您,如果这个问题已经在其他地方得到了回答,我们深表歉意。
我要求的其实很简单。我想创建一个包含一些字段和一个提交和一个取消按钮的表单。我想使用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) 我正在尝试将类似的内容插入我的网站: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?
我在网上找到的大部分信息都是针对多个复选框的。我只想要 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)
显然,我希望它改为呈现复选框。我怎样才能做到这一点?我需要一个小部件吗?
我发现 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,我设置了基本类并定义了我的所有字段,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)