Python 允许烧瓶路由中的所有方法类型
如何允许路由接受所有类型的方法 我不想只发送标准方法,如Python 允许烧瓶路由中的所有方法类型,python,flask,Python,Flask,如何允许路由接受所有类型的方法 我不想只发送标准方法,如HEAD,GET,POST,选项,删除,放置 我希望它也能接受以下方法:FOOBAR,whyithismethodnamesolog&每隔一个可能的方法名称。请参见下面的一些代码(我已经删减了)。这段代码处理添加url规则(当您在视图上执行app.route()时,flask也会调用该规则) 正如您所看到的,Flask将尽其所能确保方法得到明确定义。现在,烧瓶是基于Werkzeug的,生产线 rule = self.url_rule_cla
HEAD
,GET
,POST
,选项
,删除
,放置
我希望它也能接受以下方法:
FOOBAR
,whyithismethodnamesolog
&每隔一个可能的方法名称。请参见下面的一些代码(我已经删减了)。这段代码处理添加url规则(当您在视图上执行app.route()时,flask也会调用该规则)
正如您所看到的,Flask将尽其所能确保方法得到明确定义。现在,烧瓶是基于Werkzeug的,生产线
rule = self.url_rule_class(rule, methods=methods, **options)
…通常使用类。此类具有以下“方法”参数的文档
此规则适用于的一系列http方法。如果未指定,则所有
方法是允许的
所以,这告诉我你可能可以做如下的事情
from werkzeug.routing import Rule
app = Flask(__name__)
def my_rule_wrapper(rule, **kwargs):
kwargs['methods'] = None
return Rule(rule, **kwargs)
app.url_rule_class = my_rule_wrapper
我还没有测试出来,但希望这能让你走上正轨
编辑:
或者,您可以使用DazWorrall的答案,这似乎更好:p您可以直接为此更改url\u映射,方法是添加一个不带任何方法的:
from flask import Flask, request
import unittest
from werkzeug.routing import Rule
app = Flask(__name__)
app.url_map.add(Rule('/', endpoint='index'))
@app.endpoint('index')
def index():
return request.method
class TestMethod(unittest.TestCase):
def setUp(self):
self.client = app.test_client()
def test_custom_method(self):
resp = self.client.open('/', method='BACON')
self.assertEqual('BACON', resp.data)
if __name__ == '__main__':
unittest.main()
方法
此规则适用于的一系列http方法。如果未指定,则允许使用所有方法
要快速为路线
启用所有,而无需手动将规则添加到Flaskurl\u映射
,请修改路线
定义,如下所示:
from flask import request
HTTP_METHODS = ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH']
@app.route('/', methods=HTTP_METHODS)
def index():
return request.method
更改url_rule_类也会起作用:)如果您想打开许多(或所有)到任何方法的路由,它可能会更干净。
from flask import request
HTTP_METHODS = ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH']
@app.route('/', methods=HTTP_METHODS)
def index():
return request.method