簡體   English   中英

如何設置 settings.DEBUG == True 僅適用於超級用戶和 False 適用於所有用戶

[英]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',]

我認為這是不可能的。 設置文件從Django網站運行的一開始就確定了,但是認證檢查部分在視圖功能或模板渲染中,這是更晚的並且無法更改確定的設置。

我找到了一種使用開發服務器調試應用程序而不更改調試的方法。 為此,我制作了一個 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 = [] 中描述的郵件地址。 對於此功能,我們需要 smtp 設置,如 EMAIL_HOST、EMIL_HOST_UESR、EMAIL_HOST_PASSWORD。 詳細信息在這里https://docs.djangoproject.com/en/3.0/howto/error-reporting/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM