我有一个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)
让我感到困惑。
答案 0 :(得分:0)
uni_forms的作者在这里吸引了我。
问题是表单助手是一个属性,因此form_action是该属性的固定部分。
通过将属性更改为创建帮助程序的方法,可以动态修改form_action。
现在一切正常,不需要Javascript黑客。