【问题标题】:Flask `add_url_rule` options argument doesn't add additional keyword options [duplicate]烧瓶`add_url_rule`选项参数不添加额外的关键字选项[重复]
【发布时间】:2017-04-05 12:38:41
【问题描述】:

我正在尝试将其他关键字选项传递给使用 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 方法链接的函数吗?

【问题讨论】:

    标签: python flask


    【解决方案1】:

    options – 要转发到底层 Rule 对象的选项。 Werkzeug 的一个变化是处理方法选项。方法是此规则应限制的方法列表(GET、POST 等)。默认情况下,规则只侦听 GET(隐式 HEAD)。从 Flask 0.6 开始,OPTIONS 被隐式添加并由标准请求处理处理。

    您可以将方法发送到此:

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

    请看这段代码的实现:add_url_rule

    此外,您可以使用defaultsthis 之类的字典形式发送您的选项。

    您的参数转到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

    【讨论】:

    • 所以根据这个文档和代码,似乎options 不是methods 被忽略了?为什么加class_name会报错?
    • @NicholasTulach我试图回答你的问题,我更新了我的答案。
    • 我认为使用defaults 可以满足我的需求。谢谢!
    猜你喜欢
    • 2014-11-06
    • 2018-11-05
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2017-05-26
    相关资源
    最近更新 更多