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方法。如果未指定,则允许使用所有方法

要快速为
路线
启用所有,而无需手动将规则添加到Flask
url\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