Django에 구축된 웹 애플리케이션은 시간이 지남에 따라 엄청나게 복잡해질 수 있으며, 이것이 중앙 집중식 오류 처리가 중요한 이유 중 하나입니다. 이 튜토리얼은 새로운 Django 프로젝트에 무료 기본 Sentry 구성을 추가하는 방법을 안내합니다.
완료되면 다음 스크린샷에서 볼 수 있는 것처럼 Sentry 대시보드에서 중앙 집중식 오류 보고서를 볼 수 있습니다.
자습서 요구 사항
이 자습서에서는 다음과 같은 종속성을 사용할 것입니다. 잠시 후에 설치하겠습니다. Python 3, 가급적이면 3.7 이상이 설치되어 있는지 확인하십시오. 사용자 환경에서:
이 작업을 완료하기 위해 다음 종속성을 사용합니다 자습서:
- Django 웹 프레임워크, 버전 3.1
- sentry-sdk, 버전 0.16.5
이 블로그 게시물의 모든 코드는 MIT 라이선스에 따라 오픈 소스로 제공됩니다. GitHub의 blog-code-examples 저장소의 sentry-handle-exceptions-django-projects 디렉토리 아래에 있습니다. 자신의 프로젝트에 원하는 대로 소스 코드를 사용하십시오.
개발 환경 구성
Python 가상 환경을 유지하는 디렉터리로 변경합니다. 다음을 사용하여 이 프로젝트에 대한 새 virtualenv를 만듭니다. 명령.
다음 명령을 사용하여 새 가상 환경을 만들어 Django 프로젝트를 시작합니다. 별도의 디렉토리를 사용하는 것이 좋습니다. 예를 들어 (물결표는 사용자 디렉토리의 바로 가기입니다) 모든 virtualenvs가 어디에 있는지 항상 알 수 있습니다 있는.~/venvs/home
python3 -m venv ~/venvs/djsentry
쉘 스크립트로 virtualenv를 활성화하십시오.activate
source ~/venvs/djsentry/bin/activate
위의 명령이 실행된 후 명령 프롬프트는 다음을 수행합니다. virtualenv의 이름이 앞에 추가되도록 변경합니다. 원래 명령 프롬프트 형식이므로 프롬프트가 단순히 인 경우 이제 다음과 같이 표시됩니다.$
(djsentry) $
모든 새 터미널에서 virtualenv를 활성화해야 한다는 것을 기억하십시오 virtualenv에서 종속성을 사용하려는 창입니다.
이제 Django 패키지를 활성화되었지만 비어 있는 virtualenv에 설치할 수 있습니다.
pip install django==3.1 sentry-sdk==0.16.5
다음과 유사한 출력을 찾아 적절한 것을 확인합니다. 패키지가 PyPI에서 올바르게 설치되었습니다.
(djsentry) $ pip install django==3.1 sentry-sdk==0.16.5
Collecting django
Downloading https://files.pythonhosted.org/packages/2b/5a/4bd5624546912082a1bd2709d0edc0685f5c7827a278d806a20cf6adea28/Django-3.1-py3-none-any.whl (7.8MB)
100% |████████████████████████████████| 7.8MB 6.3MB/s
Collecting sentry-sdk
Downloading https://files.pythonhosted.org/packages/f4/4c/49f899856e3a83e02bc88f2c4945aa0bda4f56b804baa9f71e6664a574a2/sentry_sdk-0.16.5-py2.py3-none-any.whl (113kB)
100% |████████████████████████████████| 122kB 33.7MB/s
Collecting asgiref~=3.2.10 (from django)
Using cached https://files.pythonhosted.org/packages/d5/eb/64725b25f991010307fd18a9e0c1f0e6dff2f03622fc4bcbcdb2244f60d6/asgiref-3.2.10-py3-none-any.whl
Collecting sqlparse>=0.2.2 (from django)
Using cached https://files.pythonhosted.org/packages/85/ee/6e821932f413a5c4b76be9c5936e313e4fc626b33f16e027866e1d60f588/sqlparse-0.3.1-py2.py3-none-any.whl
Collecting pytz (from django)
Using cached https://files.pythonhosted.org/packages/4f/a4/879454d49688e2fad93e59d7d4efda580b783c745fd2ec2a3adf87b0808d/pytz-2020.1-py2.py3-none-any.whl
Collecting urllib3>=1.10.0 (from sentry-sdk)
Using cached https://files.pythonhosted.org/packages/9f/f0/a391d1463ebb1b233795cabfc0ef38d3db4442339de68f847026199e69d7/urllib3-1.25.10-py2.py3-none-any.whl
Collecting certifi (from sentry-sdk)
Using cached https://files.pythonhosted.org/packages/5e/c4/6c4fe722df5343c33226f0b4e0bb042e4dc13483228b4718baf286f86d87/certifi-2020.6.20-py2.py3-none-any.whl
Installing collected packages: asgiref, sqlparse, pytz, django, urllib3, certifi, sentry-sdk
Successfully installed asgiref-3.2.10 certifi-2020.6.20 django-3.1 pytz-2020.1 sentry-sdk-0.16.5 sqlparse-0.3.1 urllib3-1.25.10
이제 모든 것이 있으므로 애플리케이션 코딩을 시작할 수 있습니다. 필수 종속성이 설치되었습니다.
초기 애플리케이션 코딩
우리는 애플리케이션 구축을 시작하는 데 필요한 모든 것을 갖추고 있습니다.
Django 도구를 사용하여 다음을 만들 수 있습니다. 프로젝트를 시작하기 위한 상용구 코드 구조입니다. 응용 프로그램을 개발하는 디렉토리로 변경합니다. 때문에 예를 들어, 나는 일반적으로 모든 것에 대해 사용합니다. Python 프로젝트. 그런 다음 다음 명령을 실행하여 Django를 시작합니다 프로젝트 이름 :django-admin/Users/matt/devel/py/djsentry
django-admin.py startproject djsentry
이 자습서에서는 둘 다에 동일한 이름을 사용합니다. virtualenv 및 Django 프로젝트 디렉토리가 있지만 자신의 프로젝트를 구성하는 데 선호하는 경우 다른 이름.
이 명령은 익숙해야 하는 여러 하위 디렉토리와 함께 명명된 디렉토리를 만듭니다 이전에 Django로 작업한 적이 있다면.django-admindjsentry
디렉토리를 새 프로젝트로 변경합니다.
cd djsentry
에서 새 Django 앱을 만듭니다.djsentry
python manage.py startapp errors
Django는 프로젝트의 이름을 딴 새 폴더를 생성합니다. 작성하기 전에 앱에 액세스할 수 있도록 URL을 업데이트해야 합니다 우리의 코드.errorsviews.py
열다. 강조 표시된 항목 추가 URL 리졸버가 앱을 확인할 수 있도록 줄을 추가합니다. 요청된 URL과 일치하는 추가 경로 이 Django 응용 프로그램.djsentry/djsentry/urls.pyerrors
# djsentry/djsentry/urls.py
from django.conf.urls import include
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('', include('errors.urls')),
path('admin/', admin.site.urls),
]
저장하고 엽니다. 삽입하여 앱을 추가합니다. 강조 표시된 줄:djsentry/djsentry/urls.pydjsentry/djsentry/settings.pyerrorssettings.py
# djsentry/djsentry/settings.py
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'errors',
]
코드를 프로덕션에 배포하기 전에 기본값과 값을 변경해야 합니다. 확실한 Django 프로덕션 배포 체크리스트의 정보를 사용하여 해킹된 애플리케이션 목록에 프로젝트를 추가하지 않도록 앱을 올바르게 사용합니다. 웹에서.DEBUGSECRET_KEYsettings.py
저장하고 닫습니다.settings.py
다음으로 디렉토리로 변경합니다. 창조하다 앱에 대한 경로를 포함하도록 명명된 새 파일입니다.djsentry/errorsurls.pyerrors
이 모든 줄을 빈 파일에 추가합니다.djsentry/errors/urls.py
# djsentry/errors/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.errors_index, name="index"),
]
구해내다. Open을 클릭하여 추가합니다. 강조 표시된 두 줄을 따릅니다. 상용구 주석을 유지할 수 있습니다 "# 여기에 뷰를 생성하세요." 또는 평소처럼 삭제합니다.djsentry/errors/urls.pydjsentry/errors/views.py
# djsentry/errors/views.py
from django.shortcuts import render
def errors_index(request):
return render(request, 'index.html', {})
다음으로, 아래에 명명된 템플릿 파일에 대한 디렉토리를 만듭니다. app 디렉토리.templatesdjmaps/maps
mkdir templates
를 포함하는 명명된 새 파일을 만듭니다. Django 템플릿 언어 마크업을 따릅니다.index.htmldjsentry/errors/templates
<!DOCTYPE html>
<html>
<head>
<title>First step for errors</title>
</head>
<body>
<h1>Hello, world!</h1>
</body>
</html>
이 정적 페이지를 테스트하여 모든 코드가 다음과 같은지 확인할 수 있습니다. 기능의 고기를 추가하기 시작하기 전에 수정하십시오. 프로젝트. Django 프로젝트의 기본 디렉토리로 변경합니다. 파일이 있는 위치입니다. 개발 실행 server를 사용하여 다음 명령을 사용합니다.manage.py
python manage.py runserver
Django 개발 서버는 다음과 같은 문제 없이 시작되어야 합니다. 적용되지 않은 마이그레이션 경고입니다.
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
August 15, 2020 - 17:26:57
Django version 3.1, using settings 'djsentry.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
웹 브라우저를 열고 로 이동합니다.localhost:8000
우리의 코드는 작동하지만 아직 많은 작업을 수행하지 않습니다. 추가하자 sentry-sdk를 사용하여 작동 방식을 이해할 수 있습니다.
Sentry 및 sentry-sdk 라이브러리 추가
이제 Sentry를 추가하고 많은 오류로 테스트하여 확인할 수 있습니다 제대로 작동하고 있습니다.
Sentry는 자체 호스팅되거나 Sentry.io 를 통해 클라우드 서비스로 사용됩니다. 이 경우 튜토리얼: 클라우드 호스팅 버전보다 빠르기 때문에 클라우드 호스팅 버전을 사용합니다. 자신의 서버를 설정하고 소규모 프로젝트를 위해 무료로 사용할 수 있습니다.
Sentry.io 홈페이지로 이동합니다.
계정에 로그인하거나 새 무료 계정에 가입하십시오. 당신은 다음에있을 것입니다 로그인 또는 Sentry sign을 완료한 후의 기본 계정 대시보드 위로 과정.
계정 대시보드에는 아직 오류가 기록되지 않았습니다. 아직 계정을 Django에 연결하지 않았기 때문에 예상됩니다. 프로젝트.
을 클릭하여 이 응용 프로그램에 대한 새 Sentry 프로젝트를 만듭니다. "프로젝트"를 클릭하여 프로젝트 페이지로 이동합니다.
프로젝트 페이지에서 오른쪽 상단의 "프로젝트 만들기" 버튼을 클릭합니다. 모서리를 클릭합니다.
"Django"를 선택하거나 "Python"을 선택할 수 있습니다. 나는 보통 그냥 선택한다. "Python"은 내가 내 것을 만드는 데 사용할 프레임 워크를 아직 모른다면 신청. 그런 다음 새 프로젝트의 이름을 지정한 다음 "만들기 프로젝트" 버튼을 클릭합니다. 새 프로젝트는 Python 코드와 통합할 준비가 되었습니다.
권한을 부여하기 위해 계정과 프로젝트에 대한 고유 식별자가 필요합니다. 이 Sentry 인스턴스에 오류를 보내는 Python 코드입니다. 가장 쉬운 방법 우리에게 필요한 것은 Python+Django 문서 페이지로 이동하여 SDK를 구성하는 방법을 읽는 것입니다.
메서드의 문자열 매개 변수를 복사하고 프로젝트 코드에 노출되지 않고 환경 변수로 설정합니다.init
export SENTRY_DSN='https://yourkeygoeshere.ingest.sentry.io/project-number'
"yourkeygoeshere"를 자신의 고유 식별자로 바꿔야 합니다. 그리고 "project-number"를 방금 프로젝트와 일치하는 ID로 바꿉니다. 만든.
다음 명령을 사용하여 셸에 가 올바르게 설정되었는지 확인합니다.SENTRY_DSNecho
echo $SENTRY_DSN
다음으로, 강조 표시된 다음 새 줄로 업데이트합니다.settings.py
# settings.py
import os
import sentry_sdk
from pathlib import Path
from sentry_sdk.integrations.django import DjangoIntegration
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve(strict=True).parent.parent
파일 맨 아래에 가 있는 줄 뒤에 를 추가합니다. 센트리 구성:STATIC_URL
STATIC_URL = '/static/'
sentry_sdk.init(
dsn=os.getenv('SENTRY_DSN'),
integrations=[DjangoIntegration()],
# If you wish to associate users to errors (assuming you are using
# django.contrib.auth) you may enable sending PII data.
send_default_pii=True
)
이제 구성이 준비되었으므로 의도적으로 몇 가지를 만들 수 있습니다. Sentry의 서비스에 대한 연결을 테스트하기 위해 오류가 발생합니다.
Sentry의 오류 캐칭 테스트
의도적으로 예외를 throw하도록 기존 코드 중 일부를 변경할 것입니다 모든 것이 제대로 작동하는지 확인합니다.
하나의 새로운 것으로 열고 업데이트하는 것으로 시작하십시오. 일반 예외를 자동으로 발생시키는 강조 표시된 줄 이 함수가 호출될 때.errors/views.py
# djsentry/errors/views.py
from django.shortcuts import render
def errors_index(request):
raise Exception('testing exception')
return render(request, 'index.html', {})
브라우저에서 로 이동하면 즉시 이것을 얻을 수 있습니다. 개발 서버를 실행할 때 예외 페이지:localhost:8000
단순히 예외를 발생시키는 것이 아니라 대신 예외를 발생시키는 코드를 시도해 볼 수도 있습니다 이 division by zero와 같이 실행될 때 확실히 하나를 생성합니다. 수술:
# djsentry/errors/views.py
from django.shortcuts import render
def errors_index(request):
division_by_zero = 1 / 0
return render(request, 'index.html', {})
이러한 예외가 모두 다음과 같이 Sentry 대시보드에 표시되면 모두 그렇습니다 집합:
위의 예외는 모든 것을 테스트하는 몇 가지 일반적인 방법일 뿐입니다 Sentry에 오류 정보를 보내기 위해 노력하고 있습니다. 이 구성은 다음을 수행합니다. 또한 Django 프로젝트의 나머지 부분을 빌드할 때 볼 수 있는 다른 많은 Django 예외를 처리합니다.
'개발 언어 > Python' 카테고리의 다른 글
파이썬 자료 구조 샘플 (7) | 2025.05.18 |
---|---|
실시간 객체 인식 시스템: 웹캠과 모바일 카메라를 활용한 AI 기술 구현하기 (3) | 2025.05.11 |
파이썬 프로토콜 연동, 샘플 프로젝트로 쉽게 시작하기 (0) | 2025.05.11 |
[python] 블랙박스 영상, 자동차 번호판 찾아봐? (1) | 2025.04.29 |
RTSP 영상 모니터링을 위한 Python 입문 가이드 (1) | 2025.04.28 |