4

Я создаю приложение django. Пользователи регистрируются и отображаются статическая веб-страница, управляемая приложением flatpages.Почему django возвращает 301 и 302 в качестве кодов ответа сервера после входа пользователя в систему и отображается плоская страница?

Вот типичные сообщения о состоянии сервера Dev:

[15/Aug/2013 18:43:16] "GET/HTTP/1.1" 200 1263 
[15/Aug/2013 18:43:23] "POST/HTTP/1.1" 302 0 
[15/Aug/2013 18:43:23] "GET /home HTTP/1.1" 301 0 
[15/Aug/2013 18:43:23] "GET /home/ HTTP/1.1" 200 4529 
  • Первая строка для страницы входа в /. Это успешно подано, код 200.
  • Вторая строка - вход формы. Код ответа сервера равен 302, что означает, что страница временно перемещается.
  • Третья строка - это попытка получить страницу ('/ home'), которой не существует, потому что основная страница обслуживается flatpages. Код ответа сервера 301 указывает, что страница была перемещена навсегда.
  • Четвертая строка - успешная доставка контента ('/ home') из flatpages.

Почему сервер отвечает 302 на запрос запроса?

Что вызывает третью строку? Почему это сообщение отправлено вообще? Разве это не должно быть чем-то, что улавливается промежуточным программным обеспечением flatpages? Мой веб-клиент отправляет запрос под четвертую строчку? Как он это знает?

Я думаю, самый важный вопрос: я что-то делаю неправильно?

Спасибо за помощь!

urls.py

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^$', 'django.contrib.auth.views.login'), 
    url(r'^logout$', 'guide.views.logout_view'), 
    # other patterns 
    (r'', include('django.contrib.flatpages.urls')), 
) 

views.py

def home(request): 
    if request.user.is_authenticated() == False: 
     return HttpResponseRedirect('/') 
    return HttpResponseRedirect('/home/') 

Отрывок из settings.py

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', 
    'guide.middleware.LogActivity' 
) 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'django.contrib.flatpages', 
    'django.contrib.admin', 
    'guide', 
) 

ответ

2

Основываясь на подсказке user640916, вот как я очистил ошибки.

Для urls.py, я добавил:

url(r'^home$', 'guide.views.home'), 

Для просмотров.ру, я добавил:

from django.contrib.flatpages.views import flatpage 

def home(request): 
    return flatpage(request, "/home/") 

Мой сервер сообщений о состоянии для входа выглядеть так:

[17/Aug/2013 09:13:52] "GET/HTTP/1.1" 200 1263 
[17/Aug/2013 09:14:00] "POST/HTTP/1.1" 302 0 
[17/Aug/2013 09:14:00] "GET /home HTTP/1.1" 200 4529 

Не совсем то, что я искал, но это работает. У меня все еще есть ощущение, что я ничего не делаю. Похоже, что django.contrib.auth автоматически ищет домашний вид в URL-адресе «/ home» без конечной косой черты.

5

Я не могу увидеть ваш шаблон URL-адрес для вида дома. Но это, вероятно, не хватает слэш, который делает Джанго разослать автоматически переадресовывать:

https://docs.djangoproject.com/en/dev/ref/settings/#append-slash

ли мой веб-клиент отправляет запрос сошка четвертую строчку? Как это делает ?

Да, Status code 301 в строке 3 сообщает браузеру, что «запрошенная вами страница переместилась на другой URL-адрес x». И браузеры обычно всегда автоматически отправляют новый запрос на этот новый URL-адрес x, который является строкой 4.

+0

У меня нет шаблона для домашнего вида в urls.py, потому что он находится в flatpages db. Приложение flatpages ожидает «/ home /», но что-то еще просит «/ home». Но ваш ответ дает мне идею для чего-то попробовать. – benevolentprof

1

Я не могу прокомментировать или перепроверить, но хотел добавить для других, что beluga.me на https://stackoverflow.com/a/18265990/4651336 был на месте, и после моего success_url мне не хватало конечной черты.

Это:

success_url = 'step-two' 

изменено на:

success_url = 'step-two/' 

зафиксировал его.

 Смежные вопросы

  • Нет связанных вопросов^_^