0

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

oauth2app 中的 authorize() 方法由 Django 装饰器 @login_required 保护。事实上,如果客户在没有先登录的情况下尝试授权,则会出现登录页面。

正如预期的那样,装饰器使登录页面 URL 具有“下一个”CGI 参数,其中包含授权请求的原始 URL。

问题是,当登录页面的模板被实例化时,“next”参数没有被传播。我想要的是表单“action”包含“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)

让我不解。

4

1 回答 1

0

uni_forms 的作者在这里提示了我。

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

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

现在一切正常,无需 Javascript hack。

于 2012-09-05T19:00:38.387 回答