【发布时间】:2019-10-07 07:39:04
【问题描述】:
在我的应用程序中,我使用 flask_mongoengine 连接到 MongoDB。我收到错误
“研究”文档中不存在“{'csrf_token'}”字段
插入文档时。
我设法通过在保存之前手动删除 csrf_token 来克服错误(参见下面的代码)。有没有更优雅的方法来克服这个错误?这对于包含 EmbeddedDocument 的模型特别有用,因为所有嵌入的文档都有一个 csrf_token。
app.py
from flask import Flask, render_template, request
from flask_bootstrap import Bootstrap
from flask_mongoengine import MongoEngine
from flask_wtf.csrf import CSRFProtect
from flask_mongoengine.wtf import model_form
from wtforms.meta import DefaultMeta
db = MongoEngine()
bootstrap = Bootstrap()
csrf = CSRFProtect()
app = Flask(__name__)
app.secret_key = 'My secret key'
app.config['MONGODB_HOST'] = 'host'
app.config['MONGODB_PORT'] = 27017
app.config['MONGODB_DB'] = 'database'
app.config['MONGODB_USERNAME'] = 'user'
app.config['MONGODB_PASSWORD'] = 'user'
db.init_app(app)
bootstrap.init_app(app)
csrf.init_app(app)
class Study(db.Document):
name = db.StringField()
@app.route('/', methods=['GET', 'POST'])
def hello_world():
StudyForm = model_form(Study, field_args={})
study_form = StudyForm()
if request.method == 'POST':
study_form = StudyForm(request.form)
if study_form.validate():
del study_form._fields['csrf_token']
study_form.save()
return "Success"
return render_template('index.html', form=study_form)
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0')
index.html
{% extends "bootstrap/base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block content %}
<div class="container">
<form action="" method="POST">
{{ form.hidden_tag() }}
{{ form.name.label() }}
{{ form.name() }}
<input type=submit class='btn btn-primary '>
</form>
</div>
{% endblock %
【问题讨论】:
标签: python-3.x flask flask-wtforms flask-mongoengine