我一直关注Flask(https://www.udemy.com/python-flask-course/)上的Udemy课程,其中讲师展示了如何使用WTForms。我试图复制这个,但没有得到它来验证表单。
表单在文件admin / form.py
中定义from flask_wtf import Form
from wtforms import validators, StringField, PasswordField
from wtforms.fields.html5 import EmailField
class TestForm(Form):
data = StringField('Data', [validators.Required()])
数据库模型在admin / models.py
中定义from wtform_test import db
class TestData(db.Model):
id = db.Column(db.Integer, primary_key=True)
data = db.Column(db.String(4))
def __init__(self, data):
self.data = data
def __repr__(self):
return '<Test %r>' % self.data
最后路由在admin / views.py
中定义from wtform_test import app
from admin.models import TestData
from admin.form import TestForm
from flask import redirect, url_for, sessions
@app.route('/add_test_data', methods=('GET', 'POST'))
def add_test_data():
form = TestForm()
if form.validate_on_submit():
test_data = TestData(form.data)
db.session.add(test_data)
db.session.commit()
return redirect(url_for('index'))
else:
return "Could not validate form"
当我运行时,我总是以“无法验证表单”结束。我没有收到任何其他错误消息,所以我不知道从哪里开始寻找。
答案 0 :(得分:0)
所以我发现了问题。在上面的代码中,没有表单的呈现。这应该通过将add_test_data的应用程序路由更改为以下内容来完成:
@app.route('/add_test_data', methods=('GET', 'POST'))
def add_test_data():
form = TestForm()
if form.validate_on_submit():
test_data = TestData(form.data)
return "Success!"
else:
return render_template('add_test_data.html', form=form)
然后将html表单添加为add_test_data.html:
{% extends "base.html" %}
{% block title %}Enter test data{% endblock %}
{% block content %}
<div class="row">
<div class="col-md-offset-3 col-md-6">
<h3>Test data</h3>
{% from "_formhelpers.html" import render_field %}
<form method="POST" action="{{ url_for('add_test_data') }}" role="form">
{{ render_field(form.data, class='form-control') }}
<button type="submit" class="btn btn-default">Register</button>
</form>
</div>