gpt4 book ai didi

python - Pyramid View 重定向

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:52 27 4
gpt4 key购买 nike

我正在尝试将 Mozilla Persona (browserid) 集成到 Pyramid 应用程序中。登录过程为:

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

现在我想处理新用户订阅网络应用程序的情况,并呈现一个新 View ,要求提供更多详细信息(所需的用户名等)。

由于“记住”功能是由弹出窗口的 ajax 调用调用的,因此我无法将用户重定向到“/newuser”页面。因此,只要记住的 browserid 在数据库中没有对应的用户,每个 View 都需要将新用户重定向到“/newuser”url。

有没有办法在调用 View 以调用“new_user” View 之前拦截用户请求?或者我的身份验证方法根本不正确,我应该依赖其他方法?

最佳答案

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

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 (我是作家 :))。如果不是,我所说的仍然适用,而且会更简单。

你可以做的是:

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

登录 View 的代码可以像这样使用 pyramid_persona 的登录 View :

from pyramid_persona.views import login

@view_config(route_name='login')
def new_login(request):
response = login(request)
if response.status == 200: #the login worked
# tweak the response
return response

编辑:pyramid_persona 的文档中现在有关于此的部分:Do extra work or verification at login .

关于python - Pyramid View 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13647682/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com