2012-08-29 3 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는 걸리는 모든 메소드가 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

이제 URL에 직접 액세스합니다. – user786

0

샘플 인증

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

당신은'{%의 csrf_token의 %}를 누락 @Rakesh 여전히 같은 오류 – user786

+1

을 얻는'에 당신의 폼을 만들고, 뷰에서'RequestContext'를 리턴해야합니다. 그래서 ['render' 바로 가기] (http://django.me/render)는 매우 편리합니다. –

+0

@Khid 감사합니다. 위의 코드를 샘플링했습니다. – Rakesh