我有一个看起来像这样的表单:
class AddProductForm(Form):
title = TextField('Title')
type = QuerySelectField('Type',
query_factory=lambda: ProductType.query.order_by(ProductType.sequence).all())
def __init__(self, formdata=None, obj=None, prefix='', **kwargs):
try:
product_type_id = ProductType.query.filter_by(name=obj['product_type']).one().product_type_id
kwargs.setdefault('type', product_type_id)
except NoResultFound:
pass
Form.__init__(self, formdata, obj, prefix, **kwargs)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在尝试将其设置为在加载表单时为product_type提供合理的默认值.但是,虽然这种代码用于设置标题作为示例,但它不适用于QuerySelectField的"类型".有没有人有任何想法我怎么能解决这个问题?
假设这是不可能的,有人知道如何动态地向表单添加表单元素吗?
我正在尝试创建一个页面,列出有关实体的所有信息,然后允许用户添加有关实体的注释。我在 Google App Engine 上使用 Flask(使用 Kamal Gill 编写的样板)。
我的问题分为两部分:a) 如何查询有关实体的信息,然后使用表单发布信息?b) 如何将实体信息传递给表单,以便它编辑实体?
这是我所拥有的:
#model.py
class Providers(db.Model):
"""Provider Information DB"""
pAgency = db.StringProperty()
pSite = db.StringProperty()
programName = db.StringProperty()
pNotes = db.TextProperty()
#forms.py
class ProviderForm(wtf.Form):
providerName = wtf.TextField()
providerNote = wtf.TextAreaField('Add notes', validators=[validators.Required()])
Run Code Online (Sandbox Code Playgroud)
在 views.py 中
def list_addresses(agency):
addrs = []
addresses = db.Query(Providers).filter('pAgency =', agency).order('pAddress')
for addr in addresses:
addrs.append((addr.pAddress, addr.programName))
return addrs
def add_notes(agency):
form = ProviderForm()
if form.validate_on_submit():
notes = ProviderNotes(
pNotes = form.providerNote.data)
try:
notes.put()
return 'Worked' …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个应用程序,以使用 Flask 和 WTForms 的 FileField 表单字段将文件上传到 Web 服务器。这篇文章正在成功通过,但我很好奇为什么 form.validate_on_submit() 每次都失败,即使特定的验证器都成功了。这是我的表单 (forms.py)、应用程序 (main.py) 和 html 模板 (upload.html) 的代码。
### forms.py
from flask.ext.wtf import Form
from flask.ext.wtf.html5 import EmailField
from flask.ext.wtf.file import FileField, FileRequired, FileAllowed
from wtforms import validators, ValidationError, SubmitField
class UploadForm(Form):
presentation = FileField('Presentation in Image Format', validators=[FileRequired(), FileAllowed(['jpg', 'png'], 'Images only!')])
submit = SubmitField("Send")
### main.py
from forms import UploadForm
from flask import render_template, url_for, redirect, send_from_directory
@app.route('/upload/', methods=('GET', 'POST'))
def upload():
form = UploadForm()
if form.validate_on_submit():
filename …Run Code Online (Sandbox Code Playgroud) 任何人都可以告诉我如何将css类分配给选择值.我想用小图像改变每个选项的背景,那么我怎么能用wtforms和css做呢?
class RegisterForm(Form):
username = TextField('username', [validators.Length(min=3, max=50), validators.Required()])
img_url = SelectField('avatar',
choices=[('static/images/avatars/1.jpg', '1'),
('static/images/avatars/2.jpg', '2'),
('static/images/avatars/3.jpg', '3'),
('static/images/avatars/4.jpg', '4'),
('static/images/avatars/5.jpg', '5'),
('static/images/avatars/6.jpg', '6'),
('static/images/avatars/7.jpg', '7'),
('static/images/avatars/8.jpg', '8'),
('static/images/avatars/9.jpg', '9'),
('static/images/avatars/10.jpg','10')])
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 wtforms、flask 和 bootstrap 获得一个简单的表单,但我的表单提交导致使用表单参数的 GET 而不是 POST。
我只用flask就可以了,但是当我切换到从flask.ext.wtf导入表单时,使用form.validate_on_submit而不是仅仅验证,并使用flask_bootstrap,但现在提交表单导致GET操作而不是POST操作. 我错过了什么?
这是我在控制台中看到的内容:
GET
127.0.0.1 - - [14/Apr/2014 21:04:10] "GET / HTTP/1.1" 200 -
GET
127.0.0.1 - - [14/Apr/2014 21:04:13] "GET /?csrf_token=None&recipe1=dfsaasdf&recipe2=adfsadfs&submit_button=Submit+Form HTTP/1.1" 200
Run Code Online (Sandbox Code Playgroud)
这是我的应用程序的完整内容:
from flask import render_template, request, redirect, url_for
from flask.ext.wtf import Form
from wtforms.ext.csrf import SecureForm
from wtforms import TextField, HiddenField, ValidationError, RadioField,\
BooleanField, SubmitField, IntegerField, FormField, validators
from concat.recipe_concatenator import RecipeConcatenator
from flask_bootstrap import Bootstrap
from flask import Flask
from hashlib import md5
app = Flask(__name__)
Bootstrap(app) …Run Code Online (Sandbox Code Playgroud) from flask.ext.wtf.html5 import NumberInput
class Form(Form):
value = NumberInput( [Required()])
submit = SubmitField('Next')
Run Code Online (Sandbox Code Playgroud)
{{ form.value }}
Run Code Online (Sandbox Code Playgroud)
上面的代码将输出以下内容:
<wtforms.widgets.html5.NumberInput object at 0x3c94a50>
Run Code Online (Sandbox Code Playgroud)
好吧,我期望的是:
<input type="number">
Run Code Online (Sandbox Code Playgroud)
基本上,问题是如何input type="number"使用wtforms 渲染。
我正在尝试使用wtforms和sqlalchemy创建一个动态选择字段,但是当从数据库中插入或删除项目时它不会更新.这是我的代码:
class UserForm(Form):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
job = SelectField(
'Job',
validators=[DataRequired()],
choices=[(a.id, a.name) for a in Job.query.order_by(Job.name)]
)
Run Code Online (Sandbox Code Playgroud)
和数据库模型:
class Job(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String)
def __init__(self, name):
self.name = name
def __repr__(self):
return '<Job %s>' % self.name
Run Code Online (Sandbox Code Playgroud)
它成功显示了选择字段中的作业,但是如果您修改了表,则它不会更新,除非您完全重新启动应用程序.
我目前有一个表格
class StateForm(Form):
court_info = TextField('Court Info', [validators.Optional()])
court_rules = TextField('Court Rules', [validators.Optional()])
jurisdictional_limit = TextField('Jurisdictional Limit', [validators.Optional()])
complaint_form = TextField('Complaint Form', [validators.Optional()])
governing_law = TextField('Governing Law', [validators.Optional()])
more_info = TextField('More Info', [validators.Optional()])
Run Code Online (Sandbox Code Playgroud)
当我收到请求时,我只希望它打印实际输入信息的字段。
@app.route("/update/<state>", methods=['POST'])
@login_required
def update_states(state):
form = StateForm(request.form)
for i in form.data:
print(i)
Run Code Online (Sandbox Code Playgroud)
我不想输入if语句的原因是如果我们在表单的后面添加更多字段。
现在i打印字段名称,但不打印文本。我如何只打印其中包含文本的字段?
我正在尝试显示带有表单的页面,然后Player在提交表单时将一个添加到数据库。但是,我无法查看该表单,因为浏览器始终显示400 Bad Request错误。其他帖子表明这可能是因为表单输入的名称与我从中获取的键不匹配request.form,但是我所有的键均匹配。为什么会出现此错误?
<form method="post">
{{ form.hidden_tag() }}
<input name="name">
<input name="available">
<input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
@app.route('/addplayer', methods=['GET', 'POST'])
def addplayer():
connect('basketball_contracts', host='localhost', port=27017)
n = request.form['name']
a = request.form['available']
post= Post(
name=n,
available=a
)
post.tags = ['test']
post.save()
return render_template('addplayer.html', form=form)
Run Code Online (Sandbox Code Playgroud) 我有一个非常基本的Flask应用程序:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms_sqlalchemy.fields import QuerySelectField
from wtforms.validators import DataRequired
from flask_sqlalchemy import SQLAlchemy
from wtforms import StringField
db = SQLAlchemy()
app = Flask(__name__)
app.config['SQLALCHEMY_URI'] = 'sqlite:///:memory:'
app.config['SECRET_KEY'] = 'fnord'
db.init_app(app)
class Section(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.Text, nullable = False)
subject_id = db.Column(db.Integer, db.ForeignKey('subject.id'))
subject = db.relationship('Subject', back_populates='sections')
class Subject(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.Text, nullable = False)
sections = db.relationship('Section', back_populates='subject')
def …Run Code Online (Sandbox Code Playgroud)