2016-08-03 23 views
0

我有Django的身份驗證和登錄視圖的問題。我一直在與問候的官方文檔下面創建一個自定義登錄:https://docs.djangoproject.com/en/1.9/topics/auth/default/#how-to-log-a-user-inDjango身份驗證不生成正確的html

我創建了一個自定義登錄視圖:

def myLogin(request): 
    username = request.POST.get('username') 
    password = request.POST.get('password') 
    user = authenticate(username=username, password=password) 


    if user is not None: 
     if user.is_active: 
      login(request, user) 
      return redirect(reverse('main')) 
     else: 
      return redirect(reverse('login')) 

    return render(request, "login.html", {'user': user}) 

,這裏是我的模板,這是來自官方的文件複製: https://docs.djangoproject.com/en/1.9/topics/auth/default/#all-authentication-views

{% extends "base.html" %} 

{% block content %} 

{% if form.errors %} 
<p>Your username and password didn't match. Please try again.</p> 
{% endif %} 

{% if next %} 
    {% if user.is_authenticated %} 
    <p>Your account doesn't have access to this page. To proceed, 
    please login with an account that has access.</p> 
    {% else %} 
    <p>Please login to see this page.</p> 
    {% endif %} 
{% endif %} 

<form method="post" action="{% url 'login' %}"> 
{% csrf_token %} 
<table> 
<tr> 
    <td>{{ form.username.label_tag }}</td> 
    <td>{{ form.username }}</td> 
</tr> 
<tr> 
    <td>{{ form.password.label_tag }}</td> 
    <td>{{ form.password }}</td> 
</tr> 
</table> 

<input type="submit" value="login" /> 
</form> 

{% endblock %} 

我的網址是這樣的:

from authentication.views import myLogin 
from users.views import baseView 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^main/', baseView, name='main'), 
    url(r'^login/', myLogin, name='login'), 
    url(r'^logout/', auth_views.logout, name='logout'), 
] 

當我嘗試訪問登錄頁面時,它會生成頁面,但只有登錄按鈕,而不是寫入用戶名和密碼所需的表單域。這是爲什麼發生?當使用內置登錄時,登錄功能按預期工作,但恐怕我無法使用它,因爲我需要一些額外的功能。

回答

0
在mylogin視圖

你不傳遞任何登錄表單,以便在您的模板傳遞一個表單變量是正確的,但因爲它是空的Django不要在你的函數基於視圖中顯示任何形式的

所以你必須創建登錄表單

def myLogin(request): 
    if request.method == 'POST': 
     myloginform = LoginForm(request.POST) 
     username = request.POST.get('username') 
     password = request.POST.get('password') 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       login(request, user) 
       return redirect(reverse('main')) 
      else: 
       return redirect(reverse('login')) 
    else: 
    myloginform = LoginForm() 
    return render(request, "login.html", {'form': myloginform})