如何在Djangos登录表单中预设用户名?

时间:2009-07-02 23:01:26

标签: django django-forms django-authentication

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

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

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

2 个答案:

答案 0 :(得分: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}))

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

答案 1 :(得分:-1)

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

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

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