如何设置设置。DEBUG ==仅对超级用户为True,对所有用户为False

时间:2019-01-05 11:12:07

标签: python django python-3.x django-2.1

我正在使用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',]

2 个答案:

答案 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网站运行的一开始就确定的,但是认证检查部分在视图功能或模板渲染中,这是比较晚的,无法更改确定的设置。