棱锥视图重定向

2024-05-10 15:48:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将Mozilla Persona(browserid)集成到一个金字塔应用程序中。登录过程是:

  1. 用户可以通过单击“登录”按钮在任何页面上登录
  2. 然后弹出窗口显示一个登录表单
  3. 当用户输入正确的登录名/密码时,弹出到金字塔视图的ajax调用将检查用户凭据,如果检查成功,则调用Pyramid remember函数
  4. 然后browserid javascript代码重新加载当前页面

现在,我想处理一个新用户订阅web应用程序的情况,并呈现一个新视图,询问更多细节(所需用户名等)。在

因为“remember”函数是由弹出窗口中的ajax调用调用的,所以我无法将“/newuser”页面重定向给用户。 因此,每当记住的browserid在数据库中没有对应的用户时,每个视图都需要将新用户重定向到“/newuser”url。在

有没有方法可以在调用视图之前截获用户请求来调用“new\u user”视图?或者我的身份验证方法根本不正确,我应该依赖另一种方法?在


Tags: 方法函数用户视图应用程序mozilla过程ajax
1条回答
网友
1楼 · 发布于 2024-05-10 15:48:19

一种方法是创建一个异常,该异常应该在创建用户时引发,并将此异常用作重定向到新页面的视图的上下文。在

class NewUser(Exception):
    pass

@view_config(context=NewUser)
def new_user_exception(request):
    return HTTPFound(request.route_path('new_user'))

确保在第一次登录后的第一次请求期间引发异常(例如,在创建用户对象之后),用户将被重定向到右侧页面。在

您也可以将欢迎页面的代码直接放在new_user_exception中,但是如果不重定向,该页面将有用户所要求的url,无论它是什么。在


另一个解决方案是调整角色部分是如何完成的。为此,我猜测您使用的是pyramid_persona(我是作者:)。如果没有,我所说的仍然适用,而且会更简单。在

你可以做的是:

  • 更改login视图,使其在响应中包含一个布尔值,说明这是否是第一次登录。在
  • 更改javascript以检查此布尔值,如果不是第一次重新加载页面,如果不是第一次,则重定向到欢迎页面。在

登录视图的代码可以使用金字塔人物角色的登录视图,如下所示:

^{pr2}$

编辑:金字塔人物的文档中现在有一部分是关于这个的:Do extra work or verification at login。在

相关问题 更多 >