사용자 인증을 사용하는 첫 번째 장고 앱을 만들고 있는데 웹상에서 참조 용으로 찾은 몇 가지 예가 입니다. 내 예제에서는 'direct_to_template'메서드를 사용합니다.
문제는이 기능을 사용할 때 빈 화면이 표시된다는 것입니다. 템플릿이 내 템플릿 디렉토리에 있음을 압니다.장고 인증 : 빈 화면 받기
로그인 할 때 빈 화면이 나타나는 이유는 무엇입니까? 이 문제를 어떻게 해결할 수 있습니까? 내가 사용
예제 :
- 예 # 1 : https://docs.djangoproject.com/en/dev/topics/auth/ 예 2 : http://www.nerdydork.com/django-login-form-on-every-page.html
내 코드는 다음과 같습니다 :
------ ------- 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 %}
"빈 화면"을 재현하는 단계를 이해할 수 없습니다. 어떤 URL에 액세스하고 있습니까? 뭐하고있어? sidenote : 몇 가지 indendation 오류가 있습니다. 문제가 될 수 있습니다. views.mylogin에서 "if request.method == 'POST':"뒤에 인 덴드가 없습니다. " 이보기 바로 아래에는보기 (?)의 일부가 아닌 행이 있습니다. "print"호출 : direct_to_template ('login.html') " return direct_to_template (request, 'login.html')" –