2012-08-29 50 views
0

我得到的錯誤視圖registration.views.login沒有返回HttpResponse對象。HttpResponse對象錯誤

我正在創建一個登錄應用程序,我希望當我點擊登錄按鈕主頁顯示給我。

給出然後我得到的頁面錯誤未找到本地主機當我運行view.py:8000 /註冊/ home.html的

from django.template import loader 
from django.shortcuts import render 
from registration.models import Registration 
from django.http import HttpResponse 
from django.template import RequestContext 


def login(request): 
    t = loader.get_template('registration/login.html') 

    return render(request, 'registration/login.html') 

的urls.py文件如下:

from django.conf.urls import patterns, include, url 
from django.contrib import admin 
admin.autodiscover() 

    urlpatterns = patterns('', 
     url(r'^polls/$', 'polls.views.index'), 
     url(r'^polls/(?P<poll_id>\d+)/$', 'polls.views.detail'), 
     url(r'^polls/(?P<poll_id>\d+)/results/$', 'polls.views.results'), 
     url(r'^polls/(?P<poll_id>\d+)/vote/$', 'polls.views.vote'), 
     url(r'^admin/', include(admin.site.urls)), 
     url(r'^registration/$', 'registration.views.login'), 

,當我嘗試爲運行view.py:

from django.template import loader 
from django.shortcuts import render 
from registration.models import Registration 
from django.http import HttpResponse 
from django.template import RequestContext 

def login(request): 
    t = loader.get_template('registration/login.html') 
    if request.method == "POST": 
    username = request.POST['user_name'] 
    password = request.POST['password'] 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
     login(request, user) 
     # success 
     return render_to_response(request,'registration/login.html') 

然後我得到錯誤視圖registration.views.login沒有返回HttpResponse對象。 的urls.py文件保持相同此view.py

回答

2

您不需要在每種方法中加載模板; django會爲你照顧的。 Django要求所有從urls.py調用的方法返回一個HttpResponse對象。

你的方法有很多條件,永遠不會達到return語句。例如,如果用戶不活躍?如果請求不是POST

試試這個版本中,如果任何一個條件出現故障,用戶會被重定向回到註冊頁面:`在

def login(request): 
    # t = loader.get_template('registration/login.html') - not needed 
    if request.method == "POST": 
    username = request.POST.get('user_name') 
    password = request.POST.get('password') 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
     login(request, user) 
     # success 
     return render(request,'registration/login.html') 
     else: 
     # user was not active 
     return redirect('registration/') 
    else: 
     # not a valid user 
     return redirect('registration/') 
    else: 
     # URL was accessed directly 
     return redirect('registration/') 
+0

@ khalid謝謝!!!! – user786

+0

現在它直接訪問網址 – user786

0

樣品AUTH

view.py

def loginto(request): 
    if request.method == "POST": 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username=username, password=password) 
     if user is not None: 
     if user.is_active: 
      login(request, user) 
      return render_to_response('index1.html') 
     else: 
      return render_to_response('error1.html') 
     else: 
     return render_to_response('error2.html') 
    else: 
     return render_to_response('error2.html') 

url.py

url(r'^login', 'mytests.views.loginto', name='loginto'), 

的login.html

<form method="POST" action="{% url loginto %}"> 
    Username: <input type="text" name="username" size="15" /><br /> 
    Password: <input type="password" name="password" size="15" /><br /> 
    <div align="center"> 
    <p><input type="submit" value="Login" /></p> 
    </div> 
</form> 
+0

仍然得到同樣的錯誤 – user786

+1

@Rakesh你缺少'{%csrf_token%}您的窗體,並且您需要從視圖中返回'RequestContext';這就是爲什麼['render'shortcut](http://django.me/render)非常方便。 –

+0

@Khalid謝謝。我只是抽樣了上面的代碼。 – Rakesh

相關問題