Skip to main content
 首页 » 编程设计

python之Flask:操纵 View 参数的首选方式

2025年05月04日12over140

我正在使用 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(....): 
  ...