在对现有解决方案不满意后,我为Django编写了一个OpenId提供程序。
如果现在某人想要在 http://tejp.de/users/abc/ 某处进行身份验证并需要登录,我想显示登录表单,其中用户名预设为“abc”。像redirect_to_login
这样的标准函数似乎没有为此提供任何参数,我也看不到在手动重定向到django.contrib.auth.views.login
中的登录视图时如何预设该值。此外,似乎没有简单的方法来获取模板的附加参数值,以便我可以在那里插入预设值。
有没有办法在登录表单中自动填写用户名?如果可能的话,我想使用正常的登录视图,而不是复制和粘贴所有登录代码并编辑必要的更改。
答案 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)
解决上述问题的一些方法是:
编写您自己的身份验证表单并在显示之前预填充用户名。
使用javascript从网址中删除用户名并将其放在表单中。