Django下一个参数重定向 - 添加其他参数

时间:2012-08-09 16:14:08

标签: django redirect get django-views parameter-passing

我正在尝试为我的webapp添加身份验证。用户通过转到:

开始身份验证过程
/authorization/v1/new?client_id=X&response_type=Y&redirect_uri=Z

如果request.user不存在,我会使用以下代码重定向:

try:
    user_identity = Identity.objects.get(user=request.user)
except:
    resource = '%s?next=/authorization/v1/new' % settings.LOGIN_URL
    return HttpResponseRedirect(resource)

这会将用户带到/login/?next=/authorization/v1/new

用户成功登录,并重定向回/authorization/v1/new

但是,现在我缺少必需的GET参数client_idresponse_typeredirect_uri,这会导致授权端点抛出错误缺少必要的参数。

捕获初始GET参数的最佳方法是什么,将它们传递给登录,并将它们附加到重定向回到auth端点?

我考虑过使用会话或修改redirect_uri以附加其他参数,但我仍然需要弄清楚如何通过此过程捕获单个参数。如果可能的话,我不想修改登录代码。任何想法/建议非常感谢。谢谢!

1 个答案:

答案 0 :(得分:1)

如果您使用的是Django内置的@login_required装饰器,我相信这将为您as of r2954照顾。

鉴于你不是,你只需要复制相同的步骤。只需将next设置为完整路径的值(如Django does in @login_required),就像这样:

from urllib import quote

...
    try:
        user_identity = Identity.objects.get(user=request.user)
    except Identity.DoesNotExist:   
        return HttpResponseRedirect('%snext=%s' % (settings.LOGIN_URL, quote(request.get_full_path()))

NB 我也改变了你的代码,以避免你的Pokémon exception handling(“抓住所有人!”)。