如何从django中的视图中传递自定义身份验证表单?

时间:2017-04-12 08:12:18

标签: python django authentication django-forms django-authentication

我正在尝试将我创建的自定义身份验证表单传递给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我的自定义身份验证表单?

1 个答案:

答案 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)