我正在尝试将我创建的自定义身份验证表单传递给auth.views.login。
我找到的所有教程都是通过urls.py中的url()和登录视图的url来完成的,例如:
url(r'^login/$', auth.views.login,{'authentication_form':MyAuthenticationForm})
但我希望网址与索引网址相同,如果用户经过身份验证,则显示索引,否则显示使用我的自定义身份验证表单的登录表单。
这是我的 views.py :
from django.shortcuts import render
from django.contrib.auth import views as auth_views
def cp(request):
if request.user.is_authenticated():
return render(request, 'index.html')
# How to pass my custom authentication form ?
return auth_views.login(request)
这是有效的,但是如何告诉django我的自定义身份验证表单?
答案 0 :(得分:2)
我建议您将/login/
作为登录网址,但使用login_required
装饰器作为索引视图。当新用户访问您的索引网址时,他们将被重定向到您的登录页面,然后在他们登录后返回索引网址。
from django.contrib.auth.decorators import login_required
@login_required
def index(request):
return render(request, 'index.html')
这种方法在Django中非常典型,并且比使用索引url处理登录更简单。如果你真的想从索引页面调用登录视图,那么你应该使用你的url模式中的相同kwarg authentication_form
:
return auth_views.login(request, authentication_form=MyAuthenticationForm)