如何设置 settings.DEBUG == 仅对超级用户为真,对所有用户为假
How to set settings.DEBUG == True only for superuser and False for all users
我正在使用 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',]
我找到了一种无需更改 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。
更新:
或者我们也可以使用 django 的错误报告系统,它会自动发送 500 和 404 errros 以及整个回溯到 ADMINS = [] 和 MANAGERS = [] 中描述的邮件地址。对于此功能,我们需要像 EMAIL_HOST、EMIL_HOST_UESR、EMAIL_HOST_PASSWORD 这样的 smtp 设置。
详情在这里 https://docs.djangoproject.com/en/3.0/howto/error-reporting/
我觉得不可能。设置文件从Django网站一开始就设置好了运行,但是认证校验部分是在views functioning或者template rendering中,比较晚,设置的设置没法改了。
我正在使用 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',]
我找到了一种无需更改 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。
更新:
或者我们也可以使用 django 的错误报告系统,它会自动发送 500 和 404 errros 以及整个回溯到 ADMINS = [] 和 MANAGERS = [] 中描述的邮件地址。对于此功能,我们需要像 EMAIL_HOST、EMIL_HOST_UESR、EMAIL_HOST_PASSWORD 这样的 smtp 设置。 详情在这里 https://docs.djangoproject.com/en/3.0/howto/error-reporting/
我觉得不可能。设置文件从Django网站一开始就设置好了运行,但是认证校验部分是在views functioning或者template rendering中,比较晚,设置的设置没法改了。