0

我试图将我创建的自定义身份验证表单传递给auth.views.login。如何在django的视图中传递自定义验证表单?

所有我发现教程做它通过urls.py网址(),并与您登录视图中的URL,例如:

url(r'^login/$', auth.views.login,{'authentication_form':MyAuthenticationForm}) 

我想要的网址是相同的索引url,如果用户通过身份验证,则显示索引,否则用我的自定义身份验证表单显示登录表单。

这里是我的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我的自定义验证表单?

回答

2

我建议你保持/login/作为登录的网址,但使用login_required装饰你的索引视图。当一个新的用户访问您的索引网址,他们将回索引网址重定向到登录页面,然后一旦他们已经登录。

from django.contrib.auth.decorators import login_required 

@login_required 
def index(request): 
    return render(request, 'index.html') 

这种做法是在Django非常典型的,并且比简单使用索引url处理登录。如果你真的想调用从索引页登录视图,那么你应该使用相同的kwarg authentication_form您在URL模式有:

return auth_views.login(request, authentication_form=MyAuthenticationForm) 
+0

谢谢,这工作。我是django的新手,但我注意到有时当我进行一些更改时,即使重新启动服务器也不适用。 –

+0

这听起来像是一个单独的问题,所以我无法帮助。 – Alasdair

+0

你不需要。我只是说 :) –