2011-10-11 5 views
1

사용자 인증을 사용하는 첫 번째 장고 앱을 만들고 있는데 웹상에서 참조 용으로 찾은 몇 가지 예가 입니다. 내 예제에서는 'direct_to_template'메서드를 사용합니다.
문제는이 기능을 사용할 때 빈 화면이 표시된다는 것입니다. 템플릿이 내 템플릿 디렉토리에 있음을 압니다.장고 인증 : 빈 화면 받기

로그인 할 때 빈 화면이 나타나는 이유는 무엇입니까? 이 문제를 어떻게 해결할 수 있습니까? 내가 사용

예제 :

내 코드는 다음과 같습니다 :

------ ------- base.html -------------

Here is the trigger it's in the header bar. 
<li><a href="/login">Log-In</a></li> 

--------- views.py -----------------------

from django.template import Context, loader 
from django.conf.urls import patterns, url, include 
from django.views.generic.simple import direct_to_template 
from django.http import HttpResponse 

VER = "1a" # Global I like to print; making sure my latest code is running. 

def mylogin(request): 
    print "mylogin called [%s] " % VER 
    if request.method == 'POST': 
    user = authenticate(username=request.POST['username'], 
    password=request.POST['password']) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      # success 
      return HttpResponseRedirect('/') 
     else: 
      # disabled account 
      return direct_to_template(request, 'inactive_account.html') 
    else: 
     # invalid login 
     return direct_to_template(request, 'invalid_login.html') 

# User just clicked login 
# *** I know this is getting called and I get a blank screen here *** 
print "calling: direct_to_template('login.html')" 
return direct_to_template(request, 'login.html') 

def mylogout(request): 
    print "mylogout called" 
    logout(request) 
    return direct_to_template(request, 'logged_out.html') 

------ --- urls.py -----------------------

from django.conf.urls import patterns, include, url 
from django.views.generic.simple import direct_to_template 
from django.contrib import admin 

admin.autodiscover() 

urlpatterns = patterns('', 
    (r'^customers/$', 'jim.views.index'), 
    (r'^customers/(?P<customer_id>\d+)/$', 'jim.views.detail'), 
    (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/media'}), 
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/static'}), 
    (r'^login/$', 'jim.views.mylogin'), 
    (r'^logout/$', 'jim.views.mylogout'), 
    (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/media'}), 
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 
    url(r'^admin/', include(admin.site.urls)), 
) 

urlpatterns += patterns('django.views.generic.simple', (r'^accounts/login/$', 'direct_to_template', {'template': 'login_required.html'}), 
) 

--------- templates/login.html -----------------------

{% if user.is_authenticated %} 
    <!-- Authenticate account menu --> 
{% else %} 
    <h3>Login</h3> 
    <form action="/login/" method="post" accept-charset="utf-8"> 
    <label for="username">Username</label><input type="text" name="username" value="" id="username" /> 
    <label for="password">Password</label><input type="password" name="password" value="" id="password" /> 
    <p><input type="submit" value="Login"></p> 
    </form> 
    {% endif %} 
+0

"빈 화면"을 재현하는 단계를 이해할 수 없습니다. 어떤 URL에 액세스하고 있습니까? 뭐하고있어? sidenote : 몇 가지 indendation 오류가 있습니다. 문제가 될 수 있습니다. views.mylogin에서 "if request.method == 'POST':"뒤에 인 덴드가 없습니다. " 이보기 바로 아래에는보기 (?)의 일부가 아닌 행이 있습니다. "print"호출 : direct_to_template ('login.html') " return direct_to_template (request, 'login.html')" –

답변

1

Errr를 템플릿 같은 경우

{% if user.is_authenticated %} 
    <!-- Authenticate account menu --> 
{% else %} 
    stuff 
{% endif %} 

템플릿이 비어 꽤 논리적 보인다 - _ - 더 이상

.. (200)는 200 OK를 의미 HTTP 오류되지 않습니다 : 성공적인 HTTP 요청에 대한 표준 응답.

+0

나는 그가 옳다고 생각한다. – nemesisdesign

+0

네, 맞습니다. 2 행 아래에 뭔가 넣으면 페이지에 인쇄됩니다. 하지만 인증이 완료되지 않은 경우 어떻게 사용자를 인증 할 수 있습니까? – codingJoe

+0

이것은 바보스럽고 명백 할 수 있지만 관리자로 로그인하지 않았습니까? -__- –

0

자세한 내용을 묻는 질문을 추가했습니다. 그러나 세부 사항이 없다면 내 생각에 "login.html"템플릿을 표시하는보기가 필요하다는 것입니다.

세퍼레이트보기를 작성하여 urls.py에 넣을 수 있습니다. urls.py에서 일반적인 direct_to_template보기를 사용할 수 있습니다. 또는 당신은 예를 들어, 현재 "을 myLogin"보기를 수정할 수 있습니다

def mylogin(request): 
    print "mylogin called [%s] " % VER 
    if request.method == 'POST': 
     user = authenticate(username=request.POST['username'], 
     password=request.POST['password']) 
     if user is not None: 
      if user.is_active: 
       login(request, user) 
       # success 
       return HttpResponseRedirect('/') 
      else: 
       # disabled account 
       return direct_to_template(request, 'inactive_account.html') 
    else: 
     # display login form 
     return direct_to_template(request, 'login.html') 

의 차이는 indendation에 있고 마지막 줄에 (아무 POST 데이터는 로그인 양식을 표시하는 GET 요청을 의미합니다). 내가 말했듯이 그러나, 거기를 처리 할 수 ​​w 몇 가지 방법이 광산은 단지 제안되어 있고 나는 당신의 디자인 결정 : 어떤으로 않을거야

+0

시도했을 때 귀하의 코드, 화면은 여전히 ​​비어 있습니다.그래서 인증과는 아무 관련이 없지만 템플릿 문제입니다. 나 또한 200 오류가 발생합니다. __ "GET/login/HTTP/1.1"200 37__ – codingJoe