【问题标题】:How to inherit a flask MethodView class without its decorators?如何在没有装饰器的情况下继承烧瓶 MethodView 类?
【发布时间】:2017-05-29 21:13:02
【问题描述】:

因为没有重写相同的 API。我想从已经创建的MethodView 继承 get 方法并忽略 login_required decorator。

class DoStuffA(MethodView):
    decorators = [login_required]
    def get(self):
        return jsonify({"status":"ok"})

api.add_url_rule('/dostufa', view_func=DoStuffA.as_view("dostuffa"), methods=['GET'])

class DoStuffB(DoStuffA):
    pass

api.add_url_rule('/dostuffb', view_func=DoStuffB.as_view("dostuffb"), methods=['GET'])

如果我向/dostuffb 发出 GET 请求,

  1. 需要认证吗?

  2. 我的继承语法正确吗?

【问题讨论】:

    标签: python api inheritance flask decorator


    【解决方案1】:

    View.decorators 列表仅在调用 View.as_view() 方法时应用。如果您不想在子类中应用任何装饰器,只需使用空序列覆盖该属性即可:

    class DoStuffB(DoStuffA):
        decorators = ()  # empty tuple
    

    现在DoStuffB.as_view() 将找到空元组而不是继承的DoStuffA.decorators 列表,并且不应用任何装饰器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-25
      • 2021-04-06
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 2016-03-24
      相关资源
      最近更新 更多