오류 알림¶
공용 사이트를 실행할 때는 항상 :설정 기능을 해제해야 합니다.〉DEBUG〉 설정입니다. 이렇게 하면 서버가 훨씬 더 빨리 실행될 수 있으며, 악성 사용자가 오류 페이지에서 나타날 수 있는 응용프로그램의 세부 정보를 볼 수 없게 됩니다.
그러나 :설정으로 실행:디버그가 《거짓》으로 설정된 것은 당신의 사이트에서 발생한 오류를 절대 보지 못한다는 것을 의미하며, 그 대신 모든 사람이 당신의 공개 오류 페이지를 보게 될 것이다. 배포된 사이트에서 발생하는 오류를 추적해야 하므로 Django가 이러한 오류에 대한 세부 정보가 포함된 보고서를 생성하도록 구성할 수 있습니다.
이메일 보고¶
서버 오류¶
시기:설정:DEBUG는 《False》이며, Django는 다음과 같은 설정에 나열된 사용자에게 e-메일을 보낼 것이다.코드가 처리되지 않은 예외를 발생시키고 내부 서버 오류가 발생할 때마다 〈ADMIN’을 설정합니다( 엄밀히 말하면 HTTP 상태 코드가 500 이상인 응답의 경우). 이렇게 하면 관리자는 오류를 즉시 알 수 있습니다. :설정:〉ADMIN’은 오류에 대한 설명, 완전한 Python 추적, 오류를 발생시킨 HTTP 요청에 대한 세부 정보를 얻을 것이다.
주석
전자 메일을 보내기 위해 Django는 메일 서버에 연결하는 방법을 알려주는 몇 가지 설정이 필요합니다. 최소한 설정:을 지정해야 합니다.〉E-MAIL_HOST〉 및 가능한 설정:〉EMAIL_HOST_USER〉 및 :설정:메일 서버의 구성에 따라 다른 설정이 필요할 수도 있지만 〈EMAIL_HOST_PASSWORD’입니다. 이메일 관련 설정의 전체 목록은 :doc:〉Django 설정 설명서’를 참조하십시오.
기본적으로 Django는 root@localhost에서 이메일을 전송합니다. 그러나 일부 메일 공급자는 이 주소의 모든 전자 메일을 거부합니다. 다른 발송인 주소를 사용하려면 :seting:〉을 수정하십시오.SERVER_EMail〉 설정입니다.
이 동작을 활성화하려면 수신자의 전자 메일 주소를 : 설정에 입력하십시오.〉ADMIN〉 설정.
더 보기
서버 오류 전자 메일은 로깅 프레임워크를 사용하여 전송되므로 :doc:〉로그 구성 사용자 지정’을 통해 이 동작을 사용자 지정할 수 있습니다.
404 오류¶
끊어진 링크에 대한 전자 메일 오류(404 《페이지 없음》 오류)로 Django를 구성할 수도 있습니다. Django는 다음과 같은 경우 약 404개의 오류를 이메일로 전송합니다.
- :설정:`DEBUG` 는 《거짓》이다
- 설정:MIDDLEWARE 설정은
django.middleware.common.BrokenLinkEmailsMiddleware
.을 포함된다
이러한 조건이 충족되면 Django는 :seting에 나열된 사용자에게 e-메일을 보냅니다.당신의 코드가 404를 올리고 요청에 레퍼러가 있을 때마다 〈매니저즈’가 설정된다. 참조자가 없는 404대에게는 이메일로 보내는 것이 귀찮지 않습니다. 대개는 고장난 URL이나 고장난 웹 봇을 타이핑하는 사람들이죠. 또한 레퍼러가 요청한 URL과 동일한 경우 404초도 무시합니다. 이 동작도 손상된 웹 봇에서 발생되기 때문입니다.
주석
:class:〉~django.middleware.common.〉BreakedLink Emails Middleware’는 다음과 같은 404개의 오류를 가로채는 미들웨어 앞에 나타나야 한다.〉~django.middleware.maddle.maddle’LocalMiddleware〉 또는 :class:〉~django.the’납작한 페이지. 미들웨어플랫 페이지 폴백 미들웨어〉. 설정:의 맨 위 설정:미들웨어 설정.
: setting을 수정하여 Django에게 특정 404s에 대한 보고를 중지하라고 지시할 수 있습니다.IGNORABLE_404_URL의 설정입니다. 컴파일된 정규식 개체의 목록이어야 합니다.
import re
IGNORABLE_404_URLS = [
re.compile(r'\.(php|cgi)$'),
re.compile(r'^/phpmyadmin/'),
]
: 설정을 수정하여 Django에게 특정 404에 대한 보고를 중지하도록 지시할 수 있습니다.IGNERGABLE_404_URL에 대한 설정. 컴파일된 정규식 개체 목록이어야 합니다. 예:
다음 예에서는 브라우저 및 크롤러가 자주 요청하는 일부 기존 URL을 제외하는 방법을 보여 줍니다.
import re
IGNORABLE_404_URLS = [
re.compile(r'^/apple-touch-icon.*\.png$'),
re.compile(r'^/favicon\.ico$'),
re.compile(r'^/robots\.txt$'),
]
(참고로 이것들은 정규 표현식입니다. 그래서 우리는 그것들을 피하기 위해 기간 앞에 역슬래시를 붙였습니다.)
:class:`django.middleware.common의 동작을 사용자 지정하려면끊어진 링크 이메일 미들웨어의 추가(예: 웹 크롤러에서 오는 요청을 무시하려면)를 하위 분류하고 메소드를 재정의해야 합니다.
더 보기
404개의 오류는 로깅 프레임워크를 사용하여 기록됩니다. 기본적으로 이러한 로그 레코드는 무시되지만, 처리기와 :doc:〉로그 구성’을 적절하게 작성하여 오류 보고에 사용할 수 있습니다.
오류 보고서 필터링¶
경고
중요한 데이터를 필터링하는 것은 어려운 문제이며 중요한 데이터가 오류 보고서에 유출되지 않도록 보장하는 것은 거의 불가능합니다. 따라서 오류 보고서는 신뢰할 수 있는 팀 구성원만 사용할 수 있어야 하며, 전자 메일 등의 인터넷을 통해 암호화되지 않은 오류 보고서를 전송하지 않아야 합니다.
중요한 정보 필터링¶
오류 보고서는 오류를 디버깅하는 데 매우 유용하므로 일반적으로 이러한 오류에 대한 관련 정보를 가능한 많이 기록하는 것이 유용합니다. 예를 들어, 기본적으로 Django는 제기된 예외에 대해 〈full traceback’_, 각 〈traceback frame’_의 로컬 변수 및 :class를 기록합니다.〉~django.the’HttpRequest’s:ref:〉attributes1’입니다.
그러나 때로는 특정 유형의 정보가 너무 민감하여 사용자의 암호 또는 신용 카드 번호와 같이 추적하기에 적절하지 않을 수 있다. 따라서 :설정의 설명에 따라 중요한 설정을 필터링하는 것 외에도 다음과 같은 작업을 수행할 수 있습니다.〉DEBUG〉 설명서인 Django는 실운영 환경에서 오류 보고서(여기서: setting: setting:디버그는 func:〉sensitive_variables’와 func:〉sensitive_post_parameters’로 설정되어 있다.
-
sensitive_variables
(*variables)¶ 코드의 함수(보기 또는 일반 콜백)가 중요한 정보를 포함할 수 있는 로컬 변수를 사용하는 경우 《sensitive_variables》 decorator를 사용하여 해당 변수 값이 오류 보고서에 포함되지 않도록 방지할 수 있습니다.
from django.views.decorators.debug import sensitive_variables @sensitive_variables('user', 'pw', 'cc') def process_info(user): pw = user.pass_word cc = user.credit_card_number name = user.name ...
위의 예에서 《user》, 《pw》 및 《cc》 변수의 값은 오류 보고에 숨겨져 별(〈*********)로 대체되며 《name》 변수의 값은 공개된다.
오류 로그에서 함수의 모든 로컬 변수를 체계적으로 숨기려면 《sensitive_variables》 decorator에 어떤 인수도 제공하지 마십시오.
@sensitive_variables() def my_function(): ...
여러 개의 장식자를 사용하는 경우
숨기려는 변수가 함수 인수(예: 다음 예에서는 〈user〉 user〉)이고, 장식된 함수에 여러 개의 장식기가 있는 경우, 반드시 《@sensitive_variables》를 장식자 체인의 맨 위에 놓아야 한다. 이렇게 하면 다른 장식자를 통과할 때 함수 인수도 숨겨집니다.
@sensitive_variables('user', 'pw', 'cc') @some_decorator @another_decorator def process_info(user): ...
-
sensitive_post_parameters
(*parameters)¶ 만약 당신의 견해를 피력하는을 받는다:수업:~django.http.HttpRequest 개체:항목을 보강:`POSTparameters<django.http.HttpRequest.POST>`민감한 정보를 담아 취약해 당신은 예방할 수 있다.이런 변수들의 오류 보고서도``sensitive_post_parameters》실내 장식가를 사용하여 포함되는에서 값::.
from django.views.decorators.debug import sensitive_post_parameters @sensitive_post_parameters('pass_word', 'credit_card_number') def record_user_profile(request): UserProfile.create( user=request.user, password=request.POST['pass_word'], credit_card=request.POST['credit_card_number'], name=request.POST['name'], ) ...
위의 예에서 《pass_word》와 《credit_card_number》 POST 매개 변수의 값은 오류 보고 내 요청 표현에 숨겨져 별(〈****〉)로 대체되며, 《이름》 매개 변수의 값은 공개된다.
오류 보고서에서 요청의 모든 POST 매개 변수를 체계적으로 숨기려면 ``sensitive_post_parameters》 장식자에게 어떤 인수도 제공하지 마십시오.
@sensitive_post_parameters() def my_view(request): ...
모든 POST 매개 변수는 특정:mod:〉django.contrib에 대한 오류 보고서에서 체계적으로 필터링됩니다.auth.password, ``password_reset_password》, 《password_changes》, 《add_view》 및 《user_change_password in ``auth 관리자》에서 보기 때문에 사용자 암호와 같은 중요한 정보가 유출되는 것을 방지할 수 있다.
사용자 정의 오류 리포트¶
func:〉sensitive_variables’와 :func:〉sensitive_post_parameters〉 do는 각각 민감한 변수의 이름으로 장식된 함수에 주석을 달고 《HttpRequest》 객체에 민감한 POST 매개 변수의 이름으로 주석을 달기 때문에 오류가 발생할 때 이러한 민감한 정보가 보고서에서 필터링될 수 있다. 실제 필터링은 Django의 기본 오류 리포터 필터 :class:〉django에 의해 수행됩니다.경치, 경치,경치SafeExceptionReporterFilter〉. 이 필터는 오류 보고가 생성될 때 장식자의 주석을 사용하여 해당 값을 별(〈****〉)로 바꿉니다. 전체 사이트에 대해 이 기본 동작을 재정의하거나 사용자 지정하려면 사용자 고유의 필터 클래스를 정의하고 Django에게 :seting:을 통해 사용하도록 지시해야 합니다.〉DEFAULT_EXTECTION_REPORTER_FILTER〉 설정:
DEFAULT_EXCEPTION_REPORTER_FILTER = 'path.to.your.CustomExceptionReporterFilter'
또한 ``HttpRequest》의 ``exception_reporter_filter》 속성을 설정하여 어떤 필터를 어떤 뷰에서 사용할지 보다 세밀하게 제어할 수도 있다.
def my_view(request):
if request.user.is_authenticated:
request.exception_reporter_filter = CustomExceptionReporterFilter()
...
사용자 지정 필터 클래스는 :class:〉django’에서 상속해야 합니다.경치, 경치,경치SafeExceptionReporterFilter’는 다음과 같은 특성 및 방법을 재정의할 수 있습니다.
-
class
SafeExceptionReporterFilter
¶ -
cleansed_substitute
¶ - New in Django 3.1.
중요한 값을 대체할 문자열 값입니다. 기본적으로 이것은 민감한 변수의 값을 별(〈******〉)로 바꿉니다.
- New in Django 3.1.
설정 및 ``요청》을 일치시키는 데 사용되는 컴파일된 정규식 개체입니다.META의 가치는 민감한 것으로 간주되고 있습니다. 기본적으로 다음과 같습니다.
import re re.compile(r'API|TOKEN|KEY|SECRET|PASS|SIGNATURE', flags=re.IGNORECASE)
-
is_active
(request)¶ :meth:〉get_post_parameters〉 및 :meth:〉get_traceback_frame_variables’에서 필터링을 활성화하기 위해 《True》를 반환합니다. 다음과 같은 경우 필터는 기본적으로 활성화됩니다.디버그는 거짓입니다. 민감한 ``요청》에 주목하십시오.META의 값은 :설정에서 설명한 대로 항상 민감한 설정값과 함께 필터링됩니다.〉DEBUG〉 설명서입니다.
-
get_post_parameters
(request)¶ POST 매개 변수의 필터링된 사전을 반환합니다. 중요한 값은 다음과 같이 대체됩니다. attr:〉cleaned_substitute〉.
-
get_traceback_frame_variables
(request, tb_frame)¶ 지정된 추적 프레임에 대해 필터링된 로컬 변수 사전을 반환합니다. 중요한 값은 다음과 같이 대체됩니다. attr:〉cleaned_substitute〉.
-
필터링 이외의 오류 보고서를 사용자 정의해야 하는 경우 :setup을 정의하여 사용자 정의 오류 보고자 클래스를 지정할 수 있습니다.〉DEF_EXPECTION_REPORT〉 설정은 다음과 같습니다.
DEFAULT_EXCEPTION_REPORTER = 'path.to.your.CustomExceptionReporter'
예외 리포터는 예외 리포트 데이터를 컴파일하여 텍스트 또는 HTML로 적절하게 포맷할 책임이 있습니다. (예외 리포터는 : setting:예외 리포트 데이터를 준비할 때 〈DEFAT_REPORTER_FILTER’를 입력하세요.)
사용자 정의 리포터 클래스는 django.views.debug.ExceptionReporter
.에서 상속해야 합니다.
-
class
ExceptionReporter
¶ -
html_template_path
¶ - New in Django 3.2.
Property that returns a
pathlib.Path
representing the absolute filesystem path to a template for rendering the HTML representation of the exception. Defaults to the Django provided template.
-
text_template_path
¶ - New in Django 3.2.
Property that returns a
pathlib.Path
representing the absolute filesystem path to a template for rendering the plain-text representation of the exception. Defaults to the Django provided template.
-
get_traceback_data
()¶ 추적 정보가 들어 있는 사전을 반환합니다.
예외 보고서를 사용자 지정하기 위한 기본 확장 지점입니다. 예:
from django.views.debug import ExceptionReporter class CustomExceptionReporter(ExceptionReporter): def get_traceback_data(self): data = super().get_traceback_data() # ... remove/add something here ... return data
-
get_traceback_html
()¶ 예외 보고서의 HTML 버전을 반환합니다.
디버그 500 HTTP 오류 페이지의 HTML 버전에 사용됩니다.
-
get_traceback_text
()¶ 예외 보고서의 일반 텍스트 버전을 반환합니다.
디버그 500 HTTP 오류 페이지 및 전자 메일 보고서의 일반 텍스트 버전에 사용됩니다.
-
필터 클래스와 마찬가지로 《HttpRequest》의 《exception_reporter_class》 속성을 설정하여 지정된 보기 내에서 사용할 예외 리포터 클래스를 제어할 수 있습니다.
def my_view(request):
if request.user.is_authenticated:
request.exception_reporter_class = CustomExceptionReporter()
...
더 보기
또한 :ref의 사용자 정의 부분을 작성하여 사용자 정의 오류 보고를 설정할 수도 있습니다.〉중략 미들웨어’입니다. 사용자 정의 오류 처리를 작성하는 경우 다음과 같은 경우 Django의 기본 오류 처리를 에뮬레이트하는 것이 좋습니다.디버그는 거짓입니다.