我正在使用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',]
答案 0 :(得分:0)
我已经找到了一种使用开发服务器来调试应用程序的方法,而无需更改DEBUG。 为此,我制作了一个debug_setting.py文件(位于settings.py文件所在的位置)。
在我的debug_setting.py中:
from .settings import *
DEBUG = True
然后使用以下命令进入终端
python manage.py runserver --settings=myproject.debug_setting 0.0.0.0:5000
我们可以看到应用程序错误的回溯,而无需更改生产的DEBUG = True。
答案 1 :(得分:0)
我认为这是不可能的。设置文件是在Django网站运行的一开始就确定的,但是认证检查部分在视图功能或模板渲染中,这是比较晚的,无法更改确定的设置。