我想创建一个带有两个提交按钮的表单:假设Save
和Back to edit
。 (该表格用于预览/确认当前正在编辑的内容)。
出于明显的原因,Save
按钮具有一个值为formaction
的{{1}}属性,另一个按钮为post
。为了使get
操作有效,我在表格中加入了常用的post
。
到目前为止,所有方法都运行良好,唯一的问题是csrfmiddlewaretoken
值现在已包含在GET请求中(出于安全原因,似乎不建议这样做)。
当前,我添加了一些自定义javascript,这些脚本通过csrfmiddlewaretoken
操作查找所有提交按钮,并添加了一个点击处理程序,该操作将在提交之前从字段中删除get
。这似乎是一种比较怪异且反复无常的处理方式。
问题:是否有更好/更标准/更稳定的方式来处理这种情况?
编辑:为什么我要对某些表单操作使用获取请求?
好吧,我想遵循规则(仅对更改数据的请求使用POST请求)(在这种情况下,使用重定向进行响应)。
例如,假设有一个表单,用户可以在其中编辑(“页面A”)某些字段,然后可以按“预览”(GET操作),从而导致显示相同表单的“页面B”。 ,但具有系统生成的预览图像的只读权限。如果用户满意,则可以按“保存”(POST操作)来保存数据,或者按“后退”(GET操作,类似于浏览器的“后退”按钮)继续编辑数据。我不愿意将这种“后退”操作实现为POST,因为这会搞乱与实际的“浏览器后退”按钮等的交互。
在这个简单的示例中,当然可以要求用户使用浏览器的后退按钮而不是表单按钮,或者(可能是?)使用JavaScript模拟浏览器的后退。但是,对于稍微复杂一些的流控制,不能选择简单的“后退”。
答案 0 :(得分:1)
问题是您从包含View
令牌的表单发送了GET
请求。我宁愿推荐CSRF
请求,也不推荐PUT
请求。由于GET
请求允许传递主体值,因此CSRF令牌值未显示在URL上。