我的Flask表单未通过验证,我尝试将其更改为类似于Flask文档示例,但是我无法弄清楚什么不起作用。这是我的代码:
forms.py
<div class="container-fluid">
<h1>Push and Pull</h1>
<p>Resize the browser window to see the effect.</p>
<div class="row">
<div class="col-sm-4 order-4" style="background-color:lavender;">.col-sm-4 .order-4</div>
<div class="col" style="background-color:lavenderblush;">.col</div>
</div>
</div>
models.py
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField, validators
from wtforms.validators import DataRequired
class PostForm(FlaskForm):
body = StringField('Body', [validators.Length(min=1, max=1000)])
post_title = StringField('Post Title', [validators.Length(min=1, max=1000)])
post_genre = StringField('Post Genre', [validators.Length(min=1, max=1000)])
submit = SubmitField('Submit Post')
routes.py
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.String(20000))
post_genre = db.Column(db.String(150))
post_title = db.Column(db.String(300))
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
def __repr__(self):
return '<Post {}>'.format(self.body
Jinja / HTML
_formhelpers.html
@app.route('/editor', methods=['GET', 'POST'])
@login_required
def editor():
if current_user.is_authenticated:
form = PostForm()
if form.validate_on_submit():
flash('HELLOOOOOO')
post = Post(post_title=form.post_title.data, post_genre=form.post_genre.data, body=form.body.data, user_id=current_user)
db.session.add(post)
db.session.commit()
return(redirect(url_for('login')))
return render_template('editor.html', form=form)
else:
return redirect(url_for('index'))
editor.html
{% macro render_field(field) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</dd>
{% endmacro %}
任何帮助将不胜感激。
答案 0 :(得分:0)
您最有可能遇到跨站点请求伪造(CSRF)保护。在这种情况下,一个安全的猜测是需要添加
{{ form.csrf_token }}
到HTML表单。有关详细信息,请参见the Flask-WTF docs。
答案 1 :(得分:0)
在您的表单中,您需要指定action
。这就是它向其发送发布请求的URL。因为如果表单内的按钮上有type="submit"
,则按钮上的onclick事件正在寻找该操作属性。
<form method="post" action="/editor">