为什么django在用户登录并显示平面页后返回301和302作为服务器响应代码?

ben*_*rof 5 django response.redirect http django-flatpages http-response-codes

我正在创建一个django应用程序.用户登录并显示由flatpages应用程序管理的静态网页.

以下是来自开发服务器的典型状态消息:

 [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
Run Code Online (Sandbox Code Playgroud)
  • 第一行是/的登录页面.这是成功的,代码200.
  • 第二行是表单输入.服务器响应代码为302,表示页面暂时移动.
  • 第三行是尝试检索不存在的页面('/ home'),因为底层页面由flatpages提供.301服务器响应代码表示页面已永久移动.
  • 第四行是从flatpages成功传送内容('/ home').

为什么服务器以302响应put请求?

是什么导致了第三条线?为什么要发送此消息?这不应该是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')),
)
Run Code Online (Sandbox Code Playgroud)

views.py

def home(request):
    if request.user.is_authenticated() == False:
        return HttpResponseRedirect('/')
    return HttpResponseRedirect('/home/')
Run Code Online (Sandbox Code Playgroud)

来自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',
)
Run Code Online (Sandbox Code Playgroud)

dja*_*aut 7

我无法看到您的家庭视图的网址格式.但它可能是丢失的斜线,使django发出自动重定向:

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

我的网络客户端是否发送了第四行的请求?怎么知道这样做?

是的,第3行中的状态代码301告诉浏览器'您请求的页面移动到另一个URL x'.浏览器通常会自动向新的网址x发送新请求,即第4行.