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

cll*_*ach 2 python flask flask-restful

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

当我尝试向我的 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.')
Run Code Online (Sandbox Code Playgroud)

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

dav*_*ism 5

这是为了避免您刚刚描述的设计。事先定义所有路线。然后使用会话或数据库来存储用户是否已前往一个端点并允许前往下一个端点。

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


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