gpt4 book ai didi

python - 来自 FLASK 中 html 表单的方法 ="delete"

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:49 25 4
gpt4 key购买 nike

我有一个 HTML 表单:

{% set delete_urls = url_for('store_add') ~ store_id ~ "?__METHOD_OVERRIDE__=DELETE" %}
<form action="{{delete_urls}}" name="delete" method="post" id="{{form_id}}" style="display:none">

在 View 中:

class StoreAdd(MethodView):

@login_required
def delete(self,store_id):
store_selected = request.args['store_id']

qstr = "DELETE FROM store WHERE store_id=%d AND cust_id=%d"%(store_id,self.cust_id)
h = pgexec(qstr,False,True)
h.process()

flash("deleted the store:%d"%(store_selected))
return redirect(url_for('store_add'))

store_add = StoreAdd.as_view('store_add')
app.add_url_rule('/storeadd/',
defaults={'store_id': 0},
view_func=store_add,
methods=["GET","PUT"])
app.add_url_rule('/storeadd/',
view_func=store_add,
methods=["POST"])
app.add_url_rule('/storeadd/<int:store_id>',
view_func=store_add,
methods=['DELETE','PUT','GET'])

当然实现了路由:

from werkzeug import url_decode
from flask import flash

class MethodRewriteMiddleware(object):

def __init__(self, app):
self.app = app

def __call__(self, environ, start_response):
if 'METHOD_OVERRIDE' in environ.get('QUERY_STRING', ''):
args = url_decode(environ['QUERY_STRING'])
method = args.get('__METHOD_OVERRIDE__')
if method in ['GET', 'POST', 'PUT', 'DELETE']:
method = method.encode('ascii', 'replace')
environ['REQUEST_METHOD'] = method
return self.app(environ, start_response)

但是在提交删除表单时仍然无法访问删除方法?出了什么问题?

编辑:

delete的问题如下。当我提交表单时,它似乎试图“发布”到 url:

/storeadd/13?__METHOD_OVERRIDE__=DELETE

但是 POST url 规则说它只能是:/storeadd。因此它给出了 405 错误页面。因此,应该发生的覆盖永远不会发生。

最佳答案

你有没有在你的 Flask 应用中应用这个中间件?

app.wsgi_app = MethodRewriteMiddleware(app.wsgi_app)

关于python - 来自 FLASK 中 html 表单的方法 ="delete",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13919539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com