我正在使用Flask& amp;创建REST API有一个问题涉及操纵视图问题的参数。我目前有两个资源,“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),其中有炼金术对象不属于会话的问题,如果是懒惰的关系,则需要先添加它们。
2)看起来很“脏”,因为你的函数得到的参数并没有真正明显宣布
3)是我现在正在使用的,它使得函数本身不需要视图参数,但它解决了会话问题&它比2更明显。
有任何想法,警告,改进吗?
谢谢!
答案 0 :(得分:1)
对于始终需要g
对象的系统,使用Survey
是一个很好的解决方案。
对于混合上下文,我会做一个简单的decorator
加载相应的Survey
对象并将其传递给修饰函数(例如更新kwargs
)或类似的东西。甚至将对象放在g
中,但仅用于该函数。
像:
@app.route(...)
@load_survey
def do_something(....):
...