我正在使用 Flask 创建 REST API,并且有一个与处理 View 问题的参数相关的问题。我目前有两个资源,“Survey”和“SurveyStep”,可通过以下方式访问:
/surveys
/survey/*survey-id*/steps/*step-id*
因为我将为每个请求使用 Survey 资源,所以我希望在每个请求之前自动获取它 (SQLAlchemy)。
目前我找到了 3 种方法:
1) 编写一个 URL 转换器,如 ( http://corbinsimpson.com/entries/be-prepared.html ) 中所述
2) 使用@....before_request,手动添加东西到request.view_args
3)使用@....before_request,将其加入到flask.g对象中
我首先尝试了 1),它有炼金术对象不属于 session 的问题,如果是惰性关系,则需要先添加它们。
2) 看起来“脏”,因为你的函数得到的参数并不是真正可见的声明
3) 是我现在使用的,它使函数本身不需要 View 参数,但它解决了 session 问题并且比 2 更明显。
有什么想法、警告或改进吗?
谢谢!
请您参考如下方法:
对于总是需要Survey对象的系统,使用g是一个很好的解决方案。
对于混合上下文,我会做一个简单的 decorator 加载适当的 Survey 对象并将其传递给装饰函数(更新 kwargs例如)或类似的东西。甚至将对象放在 g 中,但仅用于该功能。
喜欢:
@app.route(...)
@load_survey
def do_something(....):
...
