为什么在Flask中调用第一个请求后阻止任何设置方法?

时间:2014-09-25 20:44:33

标签: python flask flask-restful

我正在与Flask和Flask-Restful合作开发一个项目,尝试根据Restful API中用户的输入获取动态网址。我创建了一个带有get方法的类,它将响应请求,当用户调用另一个资源时,它会激活新的资源,并且应该创建一个url。

当我尝试向我的api添加一个新资源时出现问题,api调用Flask中的函数setupmethod来检查应用程序是否在调试中以及是否已经发出第一个请求。

 if self.debug and self._got_first_request:
     raise AssertionError('A setup function was called after the '
     'first request was handled. This usually indicates a bug '
     'in the application where a module was not imported '
     'and decorators or other functionality was called too late.\n'
     'To fix this make sure to import all your view modules, '
     'database models and everything related at a central place '
     'before the application starts serving requests.')

解决此问题的一种简单方法是修改Flask中的add_view函数以避免此行为。我首先想了解为什么你会在调用第一个请求后避免像创建视图这样的设置方法,或者在我的情况下是资源?

1 个答案:

答案 0 :(得分:4)

这是为了避免像你刚才描述的那样的设计。事先定义所有路线。然后使用会话或数据库来存储用户是否已经转到一个enpoint并被允许转到下一个。

如果您需要具有不同参数的路由,则添加一个带有path参数的路由,该路由可以根据值进行分派,而不是在运行时动态添加新路由。


另一点,你永远不应该修改你安装的库的代码。如果您升级了库,您的更改将被覆盖。在Flask的情况下,您可以继承Flask对象并改写此方法。