在oauth2app中登录时传播下一个参数

时间:2012-09-02 00:04:53

标签: django django-templates django-crispy-forms

我有一个Django网站,我正在使用oauth2app库进行OAuth 2身份验证。我还修改了oauth2app以使用crispy_forms,而不是弃用的uni_form。

oauth2app中的authorize()方法由Django装饰器@login_required保护。实际上,如果客户端在未首先登录的情况下尝试授权,则会显示登录页面。

正如所料,装饰器使登录页面URL具有“下一个”CGI参数,该参数包含授权请求的原始URL。

问题是,当实例化登录页面的模板时,不会传播“next”参数。我想要的是“动作”形式包含“下一个”参数。

此页面旨在提供解决方案:

http://django-uni-form.readthedocs.org/en/latest/helpers.html

在“在视图中操作帮助程序”一节中。

在这个例子之后,我尝试了:

form = LoginForm()
redirect_url = request.GET.get('next')
if redirect_url is not None:
    form.helper.form_action = reverse(login) + '?next=' + 
      redirect_url

但结果页面的来源显示了表单的原始“操作”。对form_action的赋值似乎不会生效。实际上,如果我没有实例化模板,只是返回form_action,它就没有改变:

return HttpResponse('action: ' + form.helper.form_action)

让我感到困惑。

1 个答案:

答案 0 :(得分:0)

uni_forms的作者在这里吸引了我。

问题是表单助手是一个属性,因此form_action是该属性的固定部分。

通过将属性更改为创建帮助程序的方法,可以动态修改form_action。

现在一切正常,不需要Javascript黑客。