3

它是以下内容的副本: 即使设置中的 DEBUG=False,是否有办法向管理员用户显示 Django 调试堆栈跟踪页面? 但没有答案

当 debug=False 仅适用于管理员用户时,如何使用堆栈跟踪显示 django 错误页面。我不想使用哨兵。

4

3 回答 3

1

我找到答案

在 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("/")
于 2014-09-24T15:06:32.950 回答
0

您要求做的事情非常不安全,这可能是 Django 没有提供默认方法来执行此操作的原因。在生产应用程序上运行 DEBUG 可以将您的 SETTINGS 文件(包括 API 令牌)暴露给全世界。

如果您真的想这样做,请查看django.views.debug.technical_500_response并编写一个自定义异常处理程序,该处理程序从那里返回值。

于 2013-09-30T04:49:07.850 回答
0

这是 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',
)
于 2020-12-04T15:21:35.737 回答