我有一个 RadioField 表单项,它使用数据库中的字段值。
如果没有创建数据库,我将无法启动 Flask Webserver,即使它应该只在我转到该页面并加载该表单时访问该数据库。
如果我在 Web 服务器运行时更新数据库,我将看不到包含新数据库信息的表单。
直到我重新启动 Flask 网络服务器。
我怎样才能得到它,以便在您访问页面时强制表单从数据库中重新加载其值。
此外,我很确定它将 RadioField 的值存储在内存中,因为我可以删除数据库并且 Flask Webserver 将继续运行并且 RadioField 仍将显示。
我正在使用 sqlite3 数据库并使用 APSW(另一个 python sqlite3 包装器)读取和写入它
这是我的表格
class DatabaseForm(Form):
listOfRows = db.getDatabase()
rows = [(str(x[0]), x) for x in listOfRows]
images = RadioField('images', validators = [Required()], choices = rows)
Run Code Online (Sandbox Code Playgroud)
这是我的观点
@app.route('/database', methods = ['GET', 'POST'])
def database():
''' displays the database and allows the user to select an entry '''
form = DatabaseForm()
if form.validate_on_submit():
primaryKey = form.images.data …Run Code Online (Sandbox Code Playgroud) 我似乎无法弄清楚如何CheckboxInput在我的模板中渲染WTForms .当我尝试使用我的Jinja模板中的Flask渲染字段时,我收到此错误:
TypeError:call()只需要2个参数(给定1个)
该错误与{{ form.prefs(value='n') }}我的模板中使用的方式有关.WTForms文档中CheckBoxInput说"默认情况下,value = HTML属性为'y',除非在渲染时由value =另行指定." 无论是否指定值,我都会收到错误.
我似乎无法找到如何呈现简单的CheckBoxInput的示例.任何帮助表示赞赏.
这是我的表格:
class PreferencesForm(Form):
prefs = widgets.CheckboxInput()
Run Code Online (Sandbox Code Playgroud)
这是我的模板:
{% extends "base.html" %}
{% block content %}
<form method="POST" action="/user/prefs/">
<div>{{ form.prefs(value='n') }}</div>
<button type="submit" class="btn">Submit</button>
</form>
{% endblock %}
Run Code Online (Sandbox Code Playgroud) 我有保存表单(wtf)到(sqlalchemy)db的问题,表单正在渲染,但提交后没有任何反应...
例如:
127.0.0.1 - - [30/Dec/2013 10:30:24] "POST /add/ HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)
我试图在没有验证器的情况下保存
例如:
name = TextField('Task Name')
Run Code Online (Sandbox Code Playgroud)
我试图以其他方式保存表格:
if request.method == 'POST' and form.validate():
new_task = Tasks(
form.name.data,
form.due_date.data,
form.priority.data,
form.posted_date.data,
session['user_id'],
form.category.data,
form.super_category.data,
form.description.data
)
db.session.add(new_task)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
以下代码:
楷模 :
# -*- coding: utf-8; -*-
from app import db
import datetime
class Tasks(db.Model):
__tablename__ = "tasks"
task_id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(255),nullable=False)
description = db.Column(db.Text,nullable=False)
priority = db.Column(db.Integer,nullable=False)
posted_date = db.Column(db.DATE,nullable=False)
status = db.Column(db.Integer,default=1,nullable=False)
category = db.Column(db.String(255),nullable=False)
super_category …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) 我正在尝试使用 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) 我是 Flask 的新手,正在编写一个带有搜索功能的简单 Flask 应用程序。与google搜索类似,我想在显示结果的同时保留搜索结果页面中的搜索输入框。因此,我将搜索表单放置在基本模板中,并从基本模板中派生出一个搜索结果模板,以同时显示搜索表单和搜索结果。
为此,我做了以下工作:-
带有页面元数据和表单的基本模板(base.html)(即使在结果页面中也应该基本上存在)。
<html>
<head>
{% if title %}
<title>{{title}}</title>
{% else %}
<title>Search</title>
{% endif %}
</head>
<body>
<h1>Search </h1>
<form action="/series_search" method="post" name="search">
{{form.hidden_tag()}}
<p>
Please enter query: <br>
{{form.search(size=10)}}
</p>
<p><input type="submit" value="Search"></p>
</form>
<br>
{% block content %}{% endblock %}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
派生模板(衍生.html)有以下代码,它继承了基础模板(具有搜索模板):
{% extends "base.html" %}
{% block content %}
<h1>Search Result</h1>
{% if result %}
<p> Title: {{result.title}}</p>
{% else %}
<p> search not found!!</p>
{% endif %}
{% endblock …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 渲染。
我有一个用于登录的 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) 我有一个Flask-WTF表单,需要从字典中填充,我将其传入**kwargs.该表单用于使用该POST方法访问的Flask路径.表单未验证,字段的值为None.如何将数据字典传递给我的表单然后验证它?
@app.route('/submit', methods=['POST'])
def submit():
data = {'name': 'eee'}
form = MyForm(**data)
print(form.validate()) # False, name is required
print(form.name.data) # None
Run Code Online (Sandbox Code Playgroud) 我正在尝试显示带有表单的页面,然后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)