2

在对现有解决方案不满意后,我为 Django 编写了一个 OpenId 提供程序。

如果现在有人想在某处以http://tejp.de/users/abc/身份验证自己并需要为此登录,我想显示登录表单,用户名预设为“abc”。像这样的标准函数似乎没有为此提供任何参数,我也看不到在手动redirect_to_login重定向到登录视图时如何预设该值。django.contrib.auth.views.login此外,似乎没有简单的方法可以通过模板获取附加参数值,以便我可以在那里插入预设值。

有没有办法在登录表单中自动填写用户名?如果可能的话,我想为此使用正常的登录视图,而不是复制和粘贴所有登录代码并在必要的更改中进行编辑。

4

2 回答 2

1

记住,django 都是 python,源码是你的朋友。

这是 的原始来源redirect_to_login

def redirect_to_login(next, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
    "Redirects the user to the login page, passing the given 'next' page"
    if not login_url:
        login_url = settings.LOGIN_URL 
    return HttpResponseRedirect('%s?%s=%s' % (login_url, urlquote(redirect_field_name), urlquote(next)))

看起来您甚至可以使用指向采用适当参数的 URL 的链接来覆盖 login_url。就像是

return redirect_to_login(login_url=reverse('my_login_view', [], {'username': username}))

您不需要新表单,只需要预填充现有的登录表单。

于 2009-10-28T12:21:03.377 回答
-1

解决上述问题的一些方法是:

  1. 编写您自己的身份验证表单并在显示之前预先填写用户名。

  2. 使用 javascript 从 url 中删除用户名并将其放在表单中。

于 2009-07-03T05:58:00.497 回答