为什么django在用户登录并显示flatpage后返回301和302作为服务器响应代码?
我正在创建一个django应用程序。用户登录并显示由flatpages应用程序管理的静态网页 以下是来自dev服务器的典型状态消息:为什么django在用户登录并显示flatpage后返回301和302作为服务器响应代码?,django,http,response.redirect,http-response-codes,django-flatpages,Django,Http,Response.redirect,Http Response Codes,Django Flatpages,我正在创建一个django应用程序。用户登录并显示由flatpages应用程序管理的静态网页 以下是来自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
[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服务器响应代码表示页面已永久移动
- 第四行是从flatpages成功交付内容(“/home”)
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',
)
我看不到主视图的url模式。但可能是缺少的斜杠使django发出了一个自动重定向: 我的web客户端是否在第四行下方发送请求?怎么 它知道怎么做吗
是的,第3行告诉浏览器“您请求的页面已移动到另一个url x”。浏览器通常会自动向第4行的新url x发送一个新请求。根据user640916的提示,下面是我如何清除错误的 在url.py中,我添加了:
url(r'^home$', 'guide.views.home'),
from django.contrib.flatpages.views import flatpage
def home(request):
return flatpage(request, "/home/")
在views.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”中查找主视图,而不带尾随斜杠 我无法发表评论或投票,但我想为其他人添加一些内容,这些内容在我的成功链接后,我遗漏了一个尾随斜杠 这: 改为:
success_url = 'step-two/'
已修复。我在url.py中没有主视图模式,因为它位于flatpages数据库中。flatpages应用程序需要“/home/”,但其他东西需要“/home”。但是你的回答给了我一个尝试的想法。