【问题标题】:Flask: Preferred way to manipulate view arguments?Flask:操作视图参数的首选方式?
【发布时间】:2013-11-18 07:28:12
【问题描述】:

我正在使用 Flask 创建 REST API,并且有一个与操纵视图问题的参数有关的问题。我目前有两个资源,“Survey”和“SurveyStep”,可通过以下方式访问:

/surveys
/survey/*survey-id*/steps/*step-id*

由于我将为每个请求使用调查资源,因此我希望在每个请求之前自动获取它 (SQLAlchemy)。

目前我找到了 3 种方法来做到这一点:

1) 编写一个 URL 转换器,如 (http://corbinsimpson.com/entries/be-prepared.html) 中所述

2) 使用@..before_request,手动添加东西到request.view_args

3) 使用@....before_request,将其添加到flask.g 对象中

我先尝试了1),存在炼金对象不属于会话的问题,如果是惰性关系需要先添加。

2) 看起来很“脏”,因为你的函数得到的参数并没有真正明显地声明

3) 是我现在使用的,它使函数本身不需要视图参数,但它解决了会话问题并且比 2 更明显。

有什么想法、注意事项、改进吗?

谢谢!

【问题讨论】:

    标签: python rest sqlalchemy flask


    【解决方案1】:

    对于总是需要Survey对象的系统来说,使用g是一个很好的解决方案。

    对于混合上下文,我会做一个简单的decorator 加载适当的Survey 对象并将其传递给修饰函数(例如更新kwargs)或类似的东西。甚至将对象放入g,但仅用于该功能。

    喜欢:

    @app.route(...)
    @load_survey
    def do_something(....):
      ...
    

    【讨论】:

    • 哈,我总是忘记装饰器 :-)。谢谢,这很好很干净。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2011-07-24
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多