4

저는 장고 앱을 만들고 있습니다. 사용자는 로그인하고 플랫 페이지 응용 프로그램에서 관리하는 정적 웹 페이지가 표시됩니다. 여기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')를 검색하려는 시도입니다. 301 서버 응답 코드는 페이지가 영구적으로 이동되었음을 나타냅니다.
  • 네 번째 줄은 플랫 페이지에서 콘텐츠 ('/ home')를 성공적으로 전달한 것입니다.

서버가 put 요청에 대해 302로 응답하는 이유는 무엇입니까?

세 번째 줄의 원인은 무엇입니까? 왜이 메시지가 발송 되었습니까? 이것이 플랫 페이지 미들웨어에 잡히지 않아야할까요? 내 웹 클라이언트가 네 번째 줄에있는 요청을 보내는 것입니까? 이것을 어떻게 알 수 있습니까?

내가 가장 중요하게 생각하는 질문은 다음과 같습니다. 내가 잘못하고 있습니까?

도움 주셔서 감사합니다. 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'), 

을 전망 할 수 있습니다.평, 나는 추가 : 내가 찾던 아니 정확히

[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 

,하지만 작동 : 로그인에 대한

from django.contrib.flatpages.views import flatpage 

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

내 서버 상태 메시지는 지금처럼 보인다. 나는 여전히 내가 옳은 일을하고 있지 않다는 느낌을 가지고있다. django.contrib.auth는 "/ home"url에서 자동으로 뒤의 슬래시없이 집보기를 찾는다.

5

에서

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/') 

발췌 나는 홈 뷰에 대한 URL 패턴을 볼 수 없습니다.

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

내 웹 클라이언트가 네 번째 줄을 부하 요청을 보내는 :하지만 장고는 자동 리디렉션을 전송하게 누락 된 슬래시는 아마? 어떻게 이것을 알 수 있습니까?

예, 3 행의 Status code 301은 브라우저에 '요청한 페이지가 다른 URL로 이동되었음을 알립니다'라고 말합니다. 그리고 브라우저는 대개 항상 자동으로 새 URL x (줄 4)에 새로운 요청을 보냅니다.

+0

플랫 페이지 db에 있기 때문에 urls.py에서 집보기에 대한 패턴이 없습니다. flatpages 응용 프로그램은 "/ home /"을 기다리고 있지만 다른 것은 "/ home"을 요구하고 있습니다. 하지만 대답은 나에게 뭔가를 시도해 볼 수있는 아이디어를 제공합니다. – benevolentprof

1

댓글을 달거나 upvote 할 수는 없지만 beluga.me (https://stackoverflow.com/a/18265990/4651336)에 다른 사람을 추가하고 싶습니다. 내 success_url 뒤에 슬래시가 없습니다.

이 :

success_url = 'step-two' 

로 변경은 :

success_url = 'step-two/' 

그것을 고정.