Skip to main content
 首页 » 编程设计

python之Django:handler403 不起作用,但 404 起作用

2025年05月04日29jackei

这是 MyProj/urls.py 的内容:

from django.contrib import admin 
from django.urls import path, include 
 
urlpatterns = [ 
    path('admin/', admin.site.urls), 
    path('', include('general.urls')), # Main app 
] 
 
handler403 = 'general.views.handler403' 
handler404 = 'general.views.handler403' 

如您所见,两个处理程序都指向同一个 View ,而我最需要的第一个处理程序不起作用!例如,其他用户在/obj/12 的数据显示默认浏览器403 页面:

[22/Jan/2019 08:39:14] "GET /obj/12 HTTP/1.1" 403 0

但是第二个运行良好并显示正确的页面(当尝试访问 /obj/768 中一些不存在的数据时)。为什么以及如何解决?

Debug模式关闭。我的 Django 版本是 2.0.6

更新。

handler403.py 文件的内容:

from django.shortcuts import render_to_response 
 
def handler403(request, *args, **argv): 
    print('Handler 403 was called!') 
    u = request.user 
    params = { 
        'user': u, 
    } 
    response = render_to_response('403.html', params) 
    response.status_code = 403 
    return response 

当我尝试获取此页面时,字符串 Handler 403 was called! 从未打印出来。

请您参考如下方法:

我的猜测是您的 View 返回 django.http.HttpResponseForbidden而不是提高 django.core.exceptions.PermissionDenied异常。

只有 PermissionDenied 异常会被 handler403 处理,HttpResponseForbidden 会按原样返回。