使用@dirn 的建议,验证错误不再显示,但它似乎仍然失败,因为 root() 函数中的打印语句既不显示/运行,也没有新的 form.errors 显示。
应用代码:
#!/usr/bin/env python
import cherrypy
import os
from flask import Flask, render_template, redirect, url_for, session, request, flash, abort, Markup
from flask.ext.bootstrap import Bootstrap
from sybload import funcs, forms
app = Flask(__name__)
app.debug = True
app.config['SECRET_KEY'] = os.urandom(24)
app.config['CSRF_ENABLED'] = True
bootstrap = Bootstrap(app)
dataserver_info = funcs.get_dataserver_info()
dataservers = funcs.get_dataservers(dataserver_info)
@app.route('/', methods=['GET', 'POST'])
def root():
session.clear()
form = forms.DataServersForm()
form.dataserver.choices = zip(dataservers, dataservers)
if form.validate_on_submit():
session['dataserver'] = form.dataserver.data
# print statement below never runs
print …Run Code Online (Sandbox Code Playgroud) 我有一个yaml文件如下
name:
property_type: string
mandatory: True
default: None
help: your full name
address:
city:
property_type: string
mandatory: True
default: None
help: city
state:
property_type: string
mandatory: True
default: None
help: state
Run Code Online (Sandbox Code Playgroud)
我想要做的是解析此文件以创建一个表单类(可由 Django 或 WT-Forms 使用)来创建 Web 表单。
我不能简单地创建类,因为只要更新 yaml 配置文件,表单(以及类)就需要自动更新。
我目前正在尝试使用 pyyaml 来完成此任务。在此先感谢您的帮助。
我有一个用于登录的 Flask-WTF 表单。显然该表单永远不会有效,无论我输入什么“成功”都不会打印。为什么我的表单没有验证?
class loginForm(Form):
email = EmailField('email', validators=[InputRequired("Please enter your email address."), Email("Please enter a valid email address.")])
password = PasswordField('password', validators=[InputRequired("Please enter your password.")])
@app.route('/sign-in', methods=['POST', 'GET'])
def signIn():
form = loginForm(request.form)
if form.validate_on_submit():
print 'success'
return redirect('/')
return render_template('signIn.html')
Run Code Online (Sandbox Code Playgroud)
class loginForm(Form):
email = EmailField('email', validators=[InputRequired("Please enter your email address."), Email("Please enter a valid email address.")])
password = PasswordField('password', validators=[InputRequired("Please enter your password.")])
@app.route('/sign-in', methods=['POST', 'GET'])
def signIn():
form = loginForm(request.form)
if form.validate_on_submit():
print 'success'
return redirect('/')
return …Run Code Online (Sandbox Code Playgroud) 我有一个前端,它通过一个简单的宏生成引导程序表单:
{% macro render_field(field, class_='', label_visible=true) -%}
<div class="form-group {% if field.errors %} has-error {% endif %}">
{% if (field.type != 'HiddenField' and field.type !='CSRFTokenField') and label_visible %}
<label for="{{ field.id }}" class="control-label">{{ field.label }}</label>
{% endif %}
{{ field(class_='form-control', **kwargs) }}
{% if field.errors %}
{% for e in field.errors %}
<p class="help-block">{{ e }}</p>
{% endfor %}
{% endif %}
</div>
{%- endmacro %}
Run Code Online (Sandbox Code Playgroud)
我使用的 wtform 如下所示:
class CommentForm(Form):
comment = TextAreaField(validators=[DataRequired('Please enter your comment.')])
Run Code Online (Sandbox Code Playgroud)
是否可以为aria-required="true"具有作为验证器的字段添加前端验证 …
我无法验证某个简单的 Flask WTForm。
经过几天的努力,我已经尝试了所有我能想到的方法。总的来说,我对 Flask 和 Web 编程很陌生。
这是我的代码的精简但有效的版本。测试代码的唯一操作(除了提交表单之外)是将消息打印到终端。运行时的样子:
这是views.py:
# -*- coding: utf_8 -*-
...
@app.route('/test/new/', methods=['GET','POST'])
def newTest():
form = TestForm(request.form)
if form:
print 'request.form.get(\'name\') is %s' % (request.form.get('name'),)
if request.method == 'POST':
print 'in newTest(), request is POST'
if form.validate():
print 'form validates'
return redirect(url_for('allTests'))
else:
print 'form does not validate'
return render_template('newTest.html', form=form)
else:
return render_template('newTest.html', form=form)
Run Code Online (Sandbox Code Playgroud)
这是forms.py:
class TestForm(Form):
name = StringField(u"Test Name", [validators.InputRequired()])
address = StringField(u"Test Address", [validators.InputRequired()])
submit = SubmitField(u"Submit")
Run Code Online (Sandbox Code Playgroud)
模型.py:
from sqlalchemy …Run Code Online (Sandbox Code Playgroud) 我需要将一个对象从我的数据库传递到我的表单,我想从中读取默认值。我当前的代码如下所示:
我的初始化:
form = EditEventForm(event)
Run Code Online (Sandbox Code Playgroud)
还有我的表单类:
class EditEventForm(FlaskForm):
def __init__(self, event):
self.event = event
name = StringField('Name', validators=[DataRequired()], default=self.event.name)
description = TextAreaField('Description', validators=[DataRequired()], default=self.event.description)
street = StringField('Street and number', validators=[DataRequired()], default=self.event.street)
city = StringField('City', validators=[DataRequired()], default=self.event.city)
time = StringField('Time', validators=[DataRequired()], default=self.event.time)
Run Code Online (Sandbox Code Playgroud)
但显然,表单无法访问自上下文。有没有另一种方法可以实现它,以便我的字段可以从传递的对象中读取数据?
我的 Python Flask 应用程序使用 WTForms 和内置的 Python Enum 支持。我正在尝试提交一个表单 (POST),其中 SelectField 由枚举的所有值填充。
当我点击“提交”时,出现错误“不是有效的选择”。这看起来很奇怪,因为在检查传入表单的值时,该表单似乎确实包含提供的 Enum 值列表中的有效选择。
我正在使用名为 Enum 的子类,AJBEnum其格式如下:
class UserRole(AJBEnum):
admin = 0
recipient = 1
Run Code Online (Sandbox Code Playgroud)
我选择这样做是因为我在整个项目中使用了许多枚举,并希望编写一个帮助函数来收集所有选择并将它们格式化为 WTForm SelectField 元组友好。AJBEnum 的格式如下:
class AJBEnum(Enum):
@classmethod
def choices(cls, blank=True):
choices = []
if blank == True:
choices += [("", "")]
choices += [(choice, choice.desc()) for choice in cls]
return choices
Run Code Online (Sandbox Code Playgroud)
这意味着我可以UserRole在创建 SelectField 期间为 WTForms 提供所有选择,如下所示:
role = SelectField('Role', choices=UserRole.choices(blank=False), default=UserRole.recipient)
Run Code Online (Sandbox Code Playgroud)
请注意,函数参数blank提供了一个额外的空白 SelectField 选项,以防 SelectField 是可选的。在这种情况下,事实并非如此。 …
我有 2 条路线:
@app.route('/activity', methods=["GET"])
def addactivity():
return render_template('activity.html')
Run Code Online (Sandbox Code Playgroud)
在 acitvity.html 中,我有一个包含一些字段的表单,我想将此表单提交到另一条路线:
@app.route('/students', methods=["GET"])
def addstudents():
return render_template('students.html')
Run Code Online (Sandbox Code Playgroud)
因此,当我在 acitivity.html 中提交表单时,我将被重定向到
/students?field1=value1&field2=value2 等等...
对于活动表单,我使用带有验证器的 wtforms:DataRequired() 或 InputRequired()
问题是,当我在 addtudents 路由中使用 form.validate() 时,即使表单已验证或未验证,它也会将我重定向到 student.html 路由。我想以防表单未验证以显示 activity.html 中的错误.这怎么可能?
我是 Flask 的新手,也许我的整个代码是错误的,但概念是,如果活动表单经过验证,我将被重定向到学生路线,否则将在活动路线中显示错误。此外,我需要提交学生路线中的表格与前一个表格的参数。
我正在尝试将 Flask 集成为我正在使用的 UI 的后端。
不幸的是,UI 已经为表单设置了 CSS 和 JavaScript(以适应 UI,也适应旧版本的 IE 和其他情况)。
我遇到的第一个问题是字段已经有标签。如果我在模板中使用.labels属性:
{{ form.username.label }}
Run Code Online (Sandbox Code Playgroud)
然后它创建一个额外的标签,我似乎无法为 CSS/JavaScript 添加任何属性。但是,如果我关闭.label属性,则会在用户名输入上方创建一个额外的空白文本字段。
我的forms.py文件中的代码是:
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
Run Code Online (Sandbox Code Playgroud)
我在这方面遗漏了什么吗?
第二部分是向表单本身添加属性。我已经找到了如何使用class_='classname'添加 HTML类属性,但是 Flask-WTF 和 WTForms 文档似乎没有涉及任何其他属性(例如autcomplete="off"或placholder="username")
有没有什么方法可以用我所缺少的 Flask-WTF 或 WTForms 来完成这个任务?对于此类功能,我是否仅限于手动属性和/或 Jinja 宏?我无法想象 WTForms 和 Flask-WTF 会缺少这一点,但我也没有看到文档或 Google/StackOverflow 上的任何地方提到它。
谢谢!
使用 Flask wtform 遇到一个奇怪的问题。我在类表单中创建了 DateTimeField,但是当我查看页面时,它显示为type="text".
<input id="date" name="date" type="text" value="">
Run Code Online (Sandbox Code Playgroud)
我希望它显示为type="datetime-local",如果您不想手动输入,它会提供一个带有下拉日历和时间搜索的漂亮输入框。
此外,所有 IntegerField、FloatField 也是文本类型,而 BooleanField 和 PasswordField 则按其应有的方式运行。
也许我在这里遗漏了一些东西。这可能与烧瓶和 wtforms 吗?非常感谢任何指导
这是我的代码:
索引.html
<div class="container">
<div class="row">
<div class="col-xs-12">
<p class="lead">This is the index page </p>
{{ form.date() }}
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
脚本文件
from flask import Flask, render_template
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from wtforms import StringField, DateTimeField, BooleanField
from wtforms.validators import Required
from data import ACTORS
app = Flask(__name__)
app.config['SECRET_KEY'] = 'some?bamboozle#string-foobar' …Run Code Online (Sandbox Code Playgroud) wtforms ×10
flask ×8
python ×7
cherrypy ×1
django ×1
enums ×1
forms ×1
jinja2 ×1
python-2.7 ×1
python-3.x ×1
pyyaml ×1
sqlalchemy ×1