python - 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)
- 这条路线只显示表格
- 表单向 /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()
在这里创建一个新对象并不起作用..
有什么建议么?
解决方案
创建一个新CreatePostForm
的是正确的,因为它会为您解析提交的表单数据。这允许您调用validate_on_submit()
表单对象。
我认为您没有为 HTML 片段中的表单操作生成正确的 URL。to 的参数url_for()
应该是所需的端点(请参阅文档),应该是<post_bp>.create_post
. 这将类似于您的电话
return redirect(url_for('shipment.show_create_shipment_form'))
如果这不能解决问题,请提供您在尝试将数据发送到时收到的前端和后端错误消息/post
。
推荐阅读
- python - 使用 Beautifulsoup 提取标签的变量列表
- excel - 如何在数据透视表中按混合值分组并按日期排序?
- python - 使用 nodejs/electron 并调用 python 脚本,我如何创建一个 python 对象并在执行过程中从中调用不同的方法?
- python - 如何在网页中嵌入 Plotly 交互式图形
- linux - 使用 AWSCLI 在多个 S3 存储桶上启用版本控制
- python - 如何将浏览器中的当前选项卡从非无头更改为无头硒?
- php - ACF 字段未显示在 index.php 生成的二十七主题页面上
- appium - Appium - webdriverio - 错误:连接 ECONNREFUSED 127.0.0.1:4723
- python - 如何将glowscript的python动画保存为gif?
- python - 在 Keras 自定义层中连接多个形状为 (None, m) 的 LSTM 输出