当提交到不同的路由(即,与呈现表单的GET路由不同的POST路由)时,表单将检索表单数据

2024-05-29 00:16:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望尽可能紧密地根据REST设置我的URL/端点,同时仍然使用表单

我希望我的表格在GET /posts/new提交,并提交给POST /post

使用Flask WTForms,我只能解决如何让它获取/发布到相同的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)
  • 此路线仅显示表单
  • 表单将POST请求提交到/POST
<form action="{{url_for('shipment.C_shipment')}}" method="POST" novalidate>
  • POST /post路由处理提交的表单,例如,如果有错误,它将重定向回GET /posts/new
@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'))

    
  • 我想在这里创建一个新的CreatePostForm()对象并没有真正起作用

有什么建议吗


Tags: form表单newforgetreturncreatepost
1条回答
网友
1楼 · 发布于 2024-05-29 00:16:32

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

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

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

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

相关问题 更多 >

    热门问题