Python Django:handler403不';不起作用,但404起作用
以下是MyProj/url.py的内容:Python Django:handler403不';不起作用,但404起作用,python,django,server,http-status-code-403,Python,Django,Server,Http Status Code 403,以下是MyProj/url.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
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'
正如您所看到的,两个处理程序指向相同的视图,而我最需要的第一个处理程序不起作用!例如,其他用户在/obj/12
上的数据显示默认浏览器403页:
[2019年1月22日08:39:14]“GET/obj/12http/1.1”4030
但是第二个很好地工作并显示正确的页面(当尝试访问/obj/768
上的一些不存在的数据时)。为什么以及如何解决它
调试模式已关闭。我的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
调用了字符串
处理程序403当我尝试获取此页面时,代码>从未打印过。如果这确实是您的handler403文件(又名。handler403.py
),您可能需要
handler403 = 'general.views.handler403.handler403'
(因此实际可调用的虚线路径)。handler403应该指向一个视图
试着这样做:
from general.views.handler403 import handler403
handler403 = handler403
我的猜测是,您的视图返回一个异常,而不是引发一个异常
handler403只处理PermissionDenied
异常,一个HttpResponseForbidden
按原样返回。您能用自定义错误处理程序视图更新您的问题吗?@MohammadUmair done。不,这没有帮助,我已经尝试以不同的方式指定路径。另外,准确地说,handler403
存储在general.view.handler403
和general.view进入您的本地副本django.url.resolvers.URLResolver#resolve_error_handler
,查看它试图做什么。的确!非常感谢:)