Flask`add_url_rule`选项参数不会添加其他关键字选项

时间:2017-04-05 12:38:41

标签: python flask

我正在尝试将其他关键字选项传递给使用Flask add_url_rule注册的功能。这是我试图使用的代码:

import flask
APP = flask.Flask(__name__)
APP.add_url_rule('/', 'get_all', routes.get_all, class_name='Entity')

这是我收到的错误。

Traceback (most recent call last):
 File "src/main.py", line 118, in <module>
  class_name='Entity')
 File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 64, in wrapper_func
  return f(self, *args, **kwargs)
 File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1043, in add_url_rule
  rule = self.url_rule_class(rule, methods=methods, **options)
 TypeError: __init__() got an unexpected keyword argument 'class_name'

根据文档,我认为任何其他关键字参数都会包含在routes.get_all参数下的函数调用options中。似乎并非如此。

这与Flask add_url_rule with options throws unexpected keyword argument类似但不相同。

有人可以解释如何将任意参数传递给add_url_rule Flask方法链接的函数吗?

1 个答案:

答案 0 :(得分:0)

选项 - 要转发到基础Rule对象的选项。对Werkzeug的更改是处理方法选项。 methods是此规则应限于的方法列表(GET,POST等)。默认情况下,规则只是侦听GET(并且隐式地是HEAD)。从Flask 0.6开始,OPTIONS被标准请求处理隐式添加和处理。

您可以发送方法:

APP.add_url_rule('/', 'get_all', routes.get_all, methods=["POST", "POST", "PUT"])

请参阅此代码的实施:add_url_rule

另外,您可以在this这样的词典中使用defaults发送您的选项。

你的参数转到url_rule_class函数(参见this):

rule = self.url_rule_class(rule, methods=methods, **options)

现在看到了这个:

您可以使用任何此参数作为选项,而不是其他任何内容!

class werkzeug.routing.Rule(string, defaults=None, subdomain=None, methods=None, build_only=False, endpoint=None, strict_slashes=None, redirect_to=None, alias=False, host=None)

请参阅werkzeug.routing.Rule