如何在Flask中传递“WTF对象”

1 投票
1 回答
828 浏览
提问于 2025-04-18 07:45

我正在使用flask开发一个网站,现在遇到了一个问题。
我在想是否可以在flask中传递一个“WTF表单”对象。
就像这样:

@app.route('/')
@app.route('/index')
@login_required
def index():
  user = flask.g.user
  form = PostForm()
  return flask.render_template("index.html",
        title="Home",
        user=user,
        form = form)

这个表单,实际上是PostForm的一个实例,接下来会被以下代码处理:

@app.route('/note/<int:id>', methods=['POST'])
def note(id):

form = ?(how to get this form?)?
if form.validate_on_submit():
   print id
   content = form.body.data
   currentTime = time.strftime('%Y-%m-%d', time.localtime(time.time()) )
   user_id = id
   return flask.redirect(flask.url_for('login'))

return flask.redirect( flask.request.args.get('next') or
        flask.url_for('index') )

在模板中,我把action设置为“/note/1”,这样就会转到这个地址。但是问题是,我该如何在index函数中获取创建的表单呢?

我试过使用flask.g(显然,这不行,因为这是另一个请求)。我也尝试过使用global变量,但也失败了。

有没有人能给我一个解决方案或一些建议呢?

提前谢谢你们!

1 个回答

1

你只需要在你的 note 路由里创建一个新的 PostForm 版本,然后使用 request.form 中提交的数据:

from flask import request

@app.route('/note/<int:id>', methods=['POST'])
def note(id):
    form = PostForm(request.form)
    # or, if you are using Flask-WTF
    # you can do
    # form = PostForm()
    # and Flask-WTF will automatically pull from request.form

撰写回答