Ger*_*dJP 8 django http-status-code-404
我为经过身份验证的Django网站制作了一个自定义handler404,以避免信息泄露.
def check_logged_in_404(request):
""" Custom 404. Show friendly 404 when logged in and redirect to /login
when not logged in.
"""
if request.user.is_authenticated():
return render_to_response('404.html')
else:
return HttpResponseRedirect('/login')
Run Code Online (Sandbox Code Playgroud)
在功能上它完全符合我的要求.但是,404返回页面的状态为200,这是正确的代码方式.但这显然需要成为404返回状态.
raise404不起作用,因为如果不以无限递归结束,它会返回到此处,从而导致相同的问题.
我尝试了一个HttpResponseNotFound,但这只是一个字符串作为参数而不是模板,这不是DRY-ish.
我手动尝试设置标题:
response = render_to_response('404.html')
response['Status'] = "Not Found - 404"
return response
Run Code Online (Sandbox Code Playgroud)
然后确实设置了状态标题,但浏览器仍然显示200.
我没有选择..任何有提示的人,请成为我的英雄...... :)
Thanx和问候,
杰拉德.
编辑:我尝试了所有排序btw状态字段值,但没有运气:(
Cat*_*lus 21
我会用render_to_string
和HttpResponseNotFound
,如return HttpResponseNotFound(render_to_string('404.html'))
.
Ger*_*dJP 12
我终于找到了为什么返回的状态代码不起作用.它不是设置标题消息,而是:
response.status_code = 404
Run Code Online (Sandbox Code Playgroud)
尽管如此,PiotrLegnica建议的代码肯定会在简单性,可读性和美感上获胜.徽章仍然存在;)
问候,
杰拉德.
小智 7
根据上面的建议,这是我的404,500处理程序的简短版本:
def handler404(request):
response = render_to_response('404.html', {},
context_instance=RequestContext(request))
response.status_code = 404
return response
def handler500(request):
response = render_to_response('500.html', {},
context_instance=RequestContext(request))
response.status_code = 500
return response
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9421 次 |
最近记录: |