它是以下内容的副本: 即使设置中的 DEBUG=False,是否有办法向管理员用户显示 Django 调试堆栈跟踪页面? 但没有答案
当 debug=False 仅适用于管理员用户时,如何使用堆栈跟踪显示 django 错误页面。我不想使用哨兵。
它是以下内容的副本: 即使设置中的 DEBUG=False,是否有办法向管理员用户显示 Django 调试堆栈跟踪页面? 但没有答案
当 debug=False 仅适用于管理员用户时,如何使用堆栈跟踪显示 django 错误页面。我不想使用哨兵。
我找到答案
在 urls.py 添加
handler404 = 'site_utils.handler404'
在 urls.py 所在的同一文件夹中创建 site_utils.py 并添加到那里
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
import sys
from django.views.debug import technical_404_response, technical_500_response
def handler404(request):
if (request.user.is_active and request.user.is_staff) or request.user.is_superuser:
exc_type, exc_value, tb = sys.exc_info()
return technical_404_response(request, exc_value)
else:
return HttpResponsePermanentRedirect("/")
您要求做的事情非常不安全,这可能是 Django 没有提供默认方法来执行此操作的原因。在生产应用程序上运行 DEBUG 可以将您的 SETTINGS 文件(包括 API 令牌)暴露给全世界。
如果您真的想这样做,请查看django.views.debug.technical_500_response
并编写一个自定义异常处理程序,该处理程序从那里返回值。
这是 Django 3.2 的版本。
例如,将以下文件保存在mysite/debug.py
:
from django.utils.deprecation import MiddlewareMixin
from django.views.debug import technical_500_response
import sys
class UserBasedExceptionMiddleware(MiddlewareMixin):
def process_exception(self, request, exception):
if request.user.is_superuser:
return technical_500_response(request, *sys.exc_info())
更新您mysite/settings.py
的如下:
MIDDLEWARE_CLASSES = (
... whatever ...
'mysite.debug.UserBasedExceptionMiddleware',
)