4

我正在創建一個django應用程序。用戶登錄並顯示一個靜態網頁,由flatpages應用程序管理。爲什麼在用戶登錄並顯示flatpage後,django將301和302作爲服務器響應代碼返回?

下面是從開發服務器典型狀態消息:

[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')的成功交付。

爲什麼服務器響應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'), 

要在視圖。PY,我加入:以登錄

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

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模式。但它可能是缺少的斜線,這使得Django的發出一個自動重定向:

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

是我的Web客戶端發送請求下屬的第四行? 它知道如何做到這一點?

是的,Status code 301在第3行告訴瀏覽器'您請求的頁面移動到另一個URL x'。瀏覽器通常會自動發送一個新的請求到這個新的url x,這是第4行。

+0

我沒有urls.py中的主視圖模式,因爲它在flatpages數據庫中。 flatpages應用程序期待「/ home /」,但別的要求「/ home」。 但你的回答給了我一個嘗試的想法。 – benevolentprof

相關問題