Аутентификация Django: получение пустого экрана - PullRequest
1 голос
/ 11 октября 2011

Я создаю свое первое приложение django, которое использует аутентификацию пользователя, и я использую некоторые примеры, которые я нашел в Интернете для справки.В моих примерах используется метод '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 %}

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Ошибка, если ваш шаблон такой

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

, кажется довольно логичным, что ваш шаблон пуст - _ -

далее больше ... 200 неОшибка HTTP означает 200 OK: стандартный ответ для успешных запросов HTTP.

0 голосов
/ 12 октября 2011

Я добавил комментарий к вашему вопросу, спрашивая более подробную информацию.Но без этих подробностей мое дикое предположение заключается в том, что вам нужен вид для отображения шаблона "login.html".

Вы можете написать отдельное представление для этого и поместить его в urls.py.Вы можете использовать общее представление direct_to_template в urls.py.Или вы можете изменить текущее представление «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')

Разница заключается в неопределенности и в последней строке (без данных POST, означает, что это запрос GET для отображения формы входа),Но, как я уже сказал, есть несколько способов справиться с этим, мой - только предложение, и я не буду вдаваться в ваши дизайнерские решения:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...