我有保存表单(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) 我看不到我要去哪里错了。我安装了最新的WTF表单,但是仍然出现此错误。
方法:
from flask.ext.wtf import Form
from wtforms import PasswordField, validators, fields
from wtforms.fields import TextField, BooleanField
from wtforms.validators import Required, Email, EqualTo
Run Code Online (Sandbox Code Playgroud)
结果:
Traceback (most recent call last):
File "/bin/user_wsgi_wrapper.py", line 67, in __call__
self.error_log_file.logger.exception("Error running WSGI application")
File "/usr/lib/python3.3/logging/__init__.py", line 1269, in exception
self.error(msg, *args, **kwargs)
File "/usr/lib/python3.3/logging/__init__.py", line 1262, in error
self._log(ERROR, msg, args, **kwargs)
File "/usr/lib/python3.3/logging/__init__.py", line 1368, in _log
self.handle(record)
File "/usr/lib/python3.3/logging/__init__.py", line 1377, in handle
if (not self.disabled) and self.filter(record):
File "/usr/lib/python3.3/logflask_wtf
wtformsging/__init__.py", line …Run Code Online (Sandbox Code Playgroud) 我想按字母顺序创建一个美国州的下拉列表。我已经将状态元组转换为OrderedDict,并将其输入到WTForms SelectField中。
import collections
import wtforms
STATE_ABBREV = ('AL', 'AK', 'AZ', 'AR', 'CA', 'CO', 'CT', 'DE', 'FL', 'GA',
'HI', 'ID', 'IL', 'IN', 'IO', 'KS', 'KY', 'LA', 'ME', 'MD',
'MA', 'MI', 'MN', 'MS', 'MO', 'MT', 'NE', 'NV', 'NH', 'NJ',
'NM', 'NY', 'NC', 'ND', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC',
'SD', 'TN', 'TX', 'UT', 'VT', 'VA', 'WA', 'WV', 'WI', 'WY')
def list_to_ordered_pairs(input_list):
ordered_pairs = collections.OrderedDict()
for item in input_list:
ordered_pairs[item] = item
return ordered_pairs
state_pairs = list_to_ordered_pairs(STATE_ABBREV)
class MyForm(wtforms.Form):
state = wtforms.SelectField(label='State', …Run Code Online (Sandbox Code Playgroud) 我已经在WTF表格上挣扎了很长一段时间了.但是这个错误,似乎永远不会消失.我什么时候尝试运行此代码,表单永远不会验证
意见:
@bundle.route('/content/add/', methods=['GET', 'POST'])
@bundle.route('/content/add', methods=['GET', 'POST'])
@bundle.route('/content/edit/<posturl>/', methods=['GET', 'POST'])
@bundle.route('/content/edit/<posturl>', methods=['GET', 'POST'])
@fas_login_required
def addcontent(posturl=None):
form = CreateContent()
form_action = url_for('content.addcontent')
if posturl is not None:
content = Content.query.filter_by(slug=posturl).first_or_404()
form = CreateContent(obj=content)
if form.slug.data == posturl and request.method == 'POST' and form.validate():
form.populate_obj(content)
db.session.commit()
return redirect(url_for('content.addcontent',
posturl=posturl, updated="True"))
else:
if request.method == 'POST' and form.validate():
query = Content(form.title.data,
form.slug.data,
form.description.data,
form.media_added_ids.data,
form.active.data,
form.tags.data,
g.fas_user['username'],
form.type_content.data
)
try:
db.session.add(query)
db.session.commit()
# Duplicate entry
except Exception as e:
return str(e) …Run Code Online (Sandbox Code Playgroud) 我有一个表单,并在提交时我不断收到以下错误.我无法弄清楚问题是什么,但我认为这与selectfield有关,因为这是我第一次使用它而且之前没有遇到任何问题.
这是我的表格:
class CampaignForm(Form):
name = StringField('Campaign Name', validators=[DataRequired])
start = DateField('Start', validators=[DataRequired], format='%d-%m-%Y')
end = DateField('End', validators=[DataRequired], format='%d-%m-%Y')
budget = IntegerField('Budget', validators=[DataRequired])
customer_id = SelectField(
'Customer', validators=[DataRequired], coerce=int)
Run Code Online (Sandbox Code Playgroud)
这是我的观点,GET有效,但我在POST时遇到错误:
@app.route('/campaign/add', methods=['GET', 'POST'])
@login_required
def campaign_add():
form = CampaignForm()
form.customer_id.choices = [
(customer.id, customer.name)
for customer in current_user.account.customers]
if form.validate_on_submit():
campaign = Campaign(name=form.name.data,
start=form.start.data,
end=form.end.data,
budget=form.budget.data,
account_id=current_user.account_id,
customer_id=form.customer_id.data,
created_at=datetime.now(),
created_by=current_user.id,
updated_at=datetime.now(),
updated_by=current_user.id)
db.session.add(campaign)
db.session.commit()
return redirect(url_for('campaigns'))
return render_template('campaigns/add.html', form=form)
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误,我无法弄清楚出了什么问题.
Traceback (most recent call last):
File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/tornado/web.py", line 1309, in …Run Code Online (Sandbox Code Playgroud) 我已经反复阅读文档,并且当联系页面尝试使用带有wtforms的Recaptcha加载Flask时,仍然会收到'RuntimeError:RECAPTCHA_PUBLIC_KEY config not set'.我愿意接受任何建议.我使用Google的ReCaptcha 2,FWIW在Ubuntu 14.04上运行Flask.
编辑:此问题已通过dirn的建议解决,但我现在收到KeyError消息,尽管正确输入了公钥和私钥.
这是我的堆栈跟踪.
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__return self.wsgi_app(environ, start_response)
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/home/matt/work/bsureunion/venv/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/matt/work/bsureunion/run.py", …Run Code Online (Sandbox Code Playgroud) 我需要在表单的构造函数中生成我的字段,因为所需的字段数可能会有所不同.我认为我目前的解决方案是问题所在.当我尝试在模板中展开表单时,我得到一个例外
AttributeError:'UnboundField'对象没有属性' call '
这段代码有什么问题?
class DriverTemplateSchedueForm(Form):
def __init__(self, per_day=30, **kwargs):
self.per_day = per_day
ages = model.Agency.query.all()
ages = [(a.id, a.name) for a in ages]
self.days = [[[]] * per_day] * 7
for d in range(7):
for i in range(per_day):
lbl = 'item_' + str(d) + '_' + str(i)
self.__dict__[lbl] = SelectField(lbl, choices=ages)
self.days[d][i] = self.__dict__[lbl]
for day in self.days:
print(day)
Form.__init__(self, **kwargs)
Run Code Online (Sandbox Code Playgroud) 想象一下,我需要建立一个这样的旅行计划表:
Going from [_Picadily_Circus____]
Going to [_Marylebone_____]
(Starting by) (Arriving by) [5]:[30][pm]
Run Code Online (Sandbox Code Playgroud)
两者(开始)(到达)是提交按钮.这个例子是人为的,以显示一个双按钮用例,所以我们不讨论可用性.
我如何使用Flask和WTForms做到这一点?
如何查看实际按下了哪个按钮?
我有一个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) 我打了电话form.validate_on_submit(),但它又回来了False.如何找出表单未验证的原因?