Flask-Restless 的复杂路由(例如“忘记密码”)

Posted

技术标签:

【中文标题】Flask-Restless 的复杂路由(例如“忘记密码”)【英文标题】:Complex routes for Flask-Restless (e.g. "forgot password") 【发布时间】:2015-04-22 15:07:30 【问题描述】:

我希望在使用 Flask-Restless 时为“忘记密码”功能创建一个路由。我的想法是请求看起来像这样:

POST /api/user/<id>/forgot_password

Flask-Restless 会将此请求发送到我提供的自定义“忘记密码”路由。这样,我可以在这里对用户对象定义我自己的复杂操作(在 DB 中存储中间内容、电子邮件密码重置链接等)

我无法在docs for Flask-Restless 中找到此类功能。此外,在尝试创建一个与上述路由简单对应的快速(hacky)单独路由(在 Flask-Restless 之外)时,Flask-Restless 仍然接收请求并返回 405(不允许方法)。

人们也可以想象这种功能也适用于其他复杂的操作(例如更改密码、更改电子邮件)。

是否有可能以某种方式实现这种路由方案?如果有,怎么做?

如果不是,还有什么替代方案?单独蓝图中的普通路线?

【问题讨论】:

我不知道flask-restless,但在flask 中这是可行的。您确定在您的apimanager.create_api() 通话中包含methods=['POST'] 吗?这听起来像是你忘记了。 我很肯定 POST 包含在内并且可以正常工作。真正的问题是能够将自定义功能添加到 Flask-Restless 的自动生成的端点。正如你提到的,在 Flask 中是可能的,但是创建单独的路线会稍微违背 Flask-Restless 的目的。 在我看来,使用 POST 重置密码似乎是错误的。有关一些信息,请参阅here。如果您改为通过 PUT 实现这一点,restless 应该无需更改即可工作。 @vikramls 不管使用什么动词,问题仍然存在。一个简单的 PUT 并没有真正削减它,因为我不想直接用新密码更新模型。在这种情况下,我想通过密码重置链接向用户发送一封电子邮件,但这可能会有所不同(例如,如果您想要一个“更改电子邮件”路由,该路由发送验证电子邮件,将内容存储在数据库中等) . (有点 OT:我使用 POST 是因为找到了 here 的语义) 【参考方案1】:

这在 Flask-Restless 扩展中是不可能的。或许可以手动添加。

我在 Flask-Restless 问题跟踪器上为此做了一个feature request,被作者确定超出了范围。

【讨论】:

以上是关于Flask-Restless 的复杂路由(例如“忘记密码”)的主要内容,如果未能解决你的问题,请参考以下文章

使用请求时如何为 Flask-Restless 构建复杂的过滤器?

如何查询使用 Flask-restless 设置的 API

无法导入 Flask-Restless

Flask-Restless:manager.create_api() 不返回蓝图对象

使用 flask-restless 对 POST 的错误请求与关系

使用flask-restless实现超媒体