【发布时间】:2019-05-31 18:15:48
【问题描述】:
我正在使用 Django 2.1,我的项目已准备好投入生产。有没有一种方法可以设置 settings.DEBUG == True 仅适用于超级用户,并为普通用户显示默认的 500 内部服务器错误。我试图写一个中间件,但它似乎不起作用。我不想使用哨兵(很多地方都推荐)。 我的 middlewares.py 是:
import sys
from django.views.debug import technical_500_response
from django.conf import settings
from django.contrib.auth import get_user_model
user = get_user_model() #I am using CustomUser model not Django user model
class UserBasedExceptionMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
return self.get_response(request)
def process_exception(self, request, exception):
if request.user.is_superuser:
return technical_500_response(request, *sys.exc_info())
我还加载了我的中间件。
MIDDLEWARE = ['myproject.middlewares.UserBasedExceptionMiddleware',]
【问题讨论】:
-
500 错误表示未处理的异常,因此您不能依赖身份验证框架来确定用户是否真的是超级用户。出于安全和性能原因,DEBUG=True 仅用于开发。我建议您找到其他方法来解决您要解决的任何问题。
-
如您所知,DEBUG=True 给出了错误的整个回溯。所以我试图只为超级用户而不是任何其他用户实现这个引用。您能否指出一些其他方法或软件包,这些方法或软件包只能为超级用户显示完整的错误回溯。谢谢
标签: python django python-3.x django-2.1