Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:handler403不';不起作用,但404起作用_Python_Django_Server_Http Status Code 403 - Fatal编程技术网

Python Django:handler403不';不起作用,但404起作用

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

以下是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 = '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
,查看它试图做什么。的确!非常感谢
:)