首页 > 解决方案 > Flask WTForms - 在提交到不同的路由时检索表单数据,即与呈现表单的 GET 路由不同的 POST 路由

问题描述

我想尽可能地根据 REST 设置我的 URL/端点,同时仍然使用 Flask-WTForms。

我希望我的表单呈现在GET /posts/new,并提交到POST /post

使用 Flask-WTForms,我只能弄清楚如何让它 GET/POST 到同一个 URL。

我当前的代码如下所示:

@post_bp.route('/posts/new', methods=['GET', 'POST'])
def show_post_form():
    create_post_form = CreatePostForm()

    if create_post_form.validate_on_submit():
        return 'success'

    return render_template('create_post_form.html', form=create_post_form)

但是我希望能够让它看起来更像这样,但我似乎无法解决它:

@post_bp.route('/posts/new', methods=['GET'])
def show_post_form():
    create_post_form = CreatePostForm()

    return render_template('create_post_form.html', form=create_post_form)
<form action="{{url_for('shipment.C_shipment')}}" method="POST" novalidate>
@post_bp.route('/post', methods=['POST'])
def create_post():
    create_post_form = CreatePostForm()

    if create_post_form.validate_on_submit():
        return "success!"

    if len(create_post_form.errors) != 0:
        for error in create_shipment_form.errors:
            for msg in create_shipment_form.errors[error]:
                flash(msg)

    return redirect(url_for('shipment.show_create_shipment_form'))

    

有什么建议么?

标签: pythonflaskflask-wtformswtforms

解决方案


创建一个新CreatePostForm的是正确的,因为它会为您解析提交的表单数据。这允许您调用validate_on_submit()表单对象。

我认为您没有为 HTML 片段中的表单操作生成正确的 URL。to 的参数url_for()应该是所需的端点(请参阅文档),应该是<post_bp>.create_post. 这将类似于您的电话

return redirect(url_for('shipment.show_create_shipment_form'))

如果这不能解决问题,请提供您在尝试将数据发送到时收到的前端和后端错误消息/post


推荐阅读