我正在使用 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.')
克服此问题的一个简单方法是修改 Flask 中的 add_view 函数以避免此行为。我首先想了解为什么您会避免在调用第一个请求后创建 View 或在我的情况下创建资源之类的设置方法?
最佳答案
这是为了避免像您刚才描述的那样的设计。事先定义所有路线。然后使用 session 或数据库存储用户是否已经进入一个点并允许进入下一个点。
如果您需要具有不同参数的路由,则添加一个带有 path
参数的路由,该参数可以基于值进行分派(dispatch),而不是在运行时动态添加新路由。
还有一点,你不应该修改你安装的库的代码。如果您升级库,您的更改将被覆盖。在 Flask 的情况下,您可以子类化 Flask
对象并改写此方法。
关于python - 为什么在 Flask 中调用第一个请求后阻止任何设置方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26047784/