Аутентификация Django: получение пустого экрана

#django #templates #authentication

#django #шаблоны #аутентификация

Вопрос:

Я создаю свое первое приложение 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 %}
  

Комментарии:

1. Я не понимаю, какие шаги вы предпринимаете для воспроизведения «пустого экрана». К какому из ваших URL-адресов вы обращаетесь? Что вы нажимаете? В качестве примечания: у вас есть несколько ошибок с отступами, они могут быть проблемой: в views.mylogin нет отступов после «if request.method == ‘POST’:». И прямо под этим представлением есть строки, которые не являются частью какого-либо представления (?): вызов «print»: direct_to_template(‘login.html ‘)» вернуть direct_to_template(запрос, ‘login.html ‘)»

Ответ №1:

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

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

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

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

Комментарии:

1. Да, он прав. Если я помещаю что-то ниже строки 2, оно печатается на странице. Но как можно аутентифицировать пользователя, если аутентификация не была выполнена?

2. это может быть глупо и очевидно, но вы уверены, что не вошли в систему в качестве администратора? -__-

Ответ №2:

Я добавил комментарий к вашему вопросу с просьбой предоставить более подробную информацию. Но без этих деталей я предполагаю, что вам нужно представление для отображения вашего «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 для отображения формы входа).
Но, как я уже сказал, есть несколько способов справиться с этим, мое это всего лишь предложение, и я не буду вдаваться ни в какие ваши дизайнерские решения 🙂

Комментарии:

1. Когда я попробовал ваш код, экран по-прежнему пуст. Это заставляет меня думать, что это не имеет ничего общего с аутентификацией, а является проблемой шаблона. Я также получаю ошибку 200. __ «GET /login / HTTP / 1.1» 200 37__