来自express.js的背景,我已经习惯了方法重写中间件,该中间件使您能够通过隐藏的输入标签处理不受浏览器支持的HTTP动词(例如PUT,DELETE等)。
前任)
<input type="hidden" name="_method" value="PUT">
如何在Flask中模仿这种中间件?Flask不会自动处理这些隐藏的输入,因此我无法处理GET或POST以外的请求。我的代码摘录可以在下面找到。
@blueprint.route('/news/<int:article_id>', methods=['GET','PUT','DELETE'])
def article(article_id):
if is_logged_in() and is_admin():
if request.method == 'PUT':
#do something
<form action="/news/{{ post.id }}" method="post">
{{ form.hidden_tag() }}
<input type="hidden" name="_method" value="PUT">
{{ form.title.label }} {{ form.title }}
{{ form.body.label }} {{ form.body }}
{{ form.submit }}
</form>
编辑:找到了解决方案:http : //flask.pocoo.org/snippets/38/
实际上,这与Flask没有任何关系(我想,除了它附带的模板引擎之外)-您仍然必须生成一个HTML页面,该页面将告诉浏览器使用PUT。
HTMLform
元素不能直接用于POST或GET之外的任何其他功能,因此对其他方法的任何支持都应通过XMLHttpRequest
javascript来完成。
也可以通过具有隐藏字段(如上所示)并让服务器为您进行转换来通过POST “隧道”其他请求方法,但这并不是特别有效。您可以在上一个SO问题中看到一个示例,尽管我不建议这样做,XMLHttpRequest
因为它需要您可能不应该依赖的服务器支持。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句