10

私はdjangoアプリを作成しています。ユーザーがログインすると、flatpages アプリによって管理される静的 Web ページが表示されます。

以下は、開発サーバーからの典型的なステータス メッセージです。

 [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。
  • 2行目はフォーム入力です。サーバーの応答コードは 302 です。これは、ページが一時的に移動されたことを意味します。
  • 3 行目は、存在しないページ ('/home') を取得しようとしています。これは、基礎となるページがフラットページによって提供されているためです。301 サーバー応答コードは、ページが完全に移動されたことを示します。
  • 4 行目は、フラットページからのコンテンツ ('/home') の配信の成功です。

put リクエストに対してサーバーが 302 で応答するのはなぜですか?

3行目の原因は何ですか?このメッセージが送信されるのはなぜですか? これは flatpages ミドルウェアによってキャッチされるものではないでしょうか? 私の Web クライアントは 4 行目の下にあるリクエストを送信していますか? これを行うことをどのように知っていますか?

最も重要な質問は次のとおりだと思います。私は何か間違ったことをしていますか?

助けてくれてありがとう!

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

ビュー.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',
)
4

3 に答える 3

9

ホーム ビューの URL パターンがわかりません。しかし、django が自動リダイレクトを送信する原因は、おそらくスラッシュの欠落です。

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

私の Web クライアントは 4 行目の下にあるリクエストを送信していますか? これを行うことをどのように知っていますか?

はい、 3 行目のステータス コード 301は、ブラウザに「リクエストしたページは別の URL x に移動しました」と伝えます。また、ブラウザは通常、常に自動的に新しいリクエストを新しい URL x に送信します。これは 4 行目です。

于 2013-08-16T04:48:10.870 に答える
3

user640916 のヒントに基づいて、エラーをクリーンアップする方法を次に示します。

urls.py に、次を追加しました。

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

views.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」でホーム ビューを自動的に検索するようです。

于 2013-08-17T16:23:09.650 に答える