본문 바로가기
웹디자인 (HTML,JS)

Django Admin 기본구성 및 어드민 화면 커스터마이징

by 날으는물고기 2023. 12. 26.

Django Admin 기본구성 및 어드민 화면 커스터마이징

Django는 Python으로 작성된 웹 프레임워크로, 관리자 도구를 포함하고 있어요. 이 도구는 Django 애플리케이션의 데이터를 쉽게 관리하고 조작할 수 있도록 돕습니다. Django 관리자는 오픈 소스이며, 개발자들이 데이터 모델을 쉽게 관리하고 변경할 수 있는 강력한 도구입니다.

Django administration

Django 관리자를 설정하고 사용하는 것은 다음과 같은 단계를 따릅니다.

  1. Django 설치
    Django가 설치되어 있지 않다면, 터미널 또는 명령 프롬프트에서 다음 명령을 실행하여 설치하세요.
    pip install Django
  2. Django 프로젝트 생성
    Django 프로젝트를 생성합니다.여기서 "myproject"는 프로젝트의 이름입니다.
    django-admin startproject myproject
  3. 앱 생성
    Django 앱을 생성합니다.여기서 "myapp"은 앱의 이름입니다.
    cd myproject python manage.py startapp myapp
  4. 모델 정의
    앱 내의 models.py 파일에서 데이터 모델을 정의합니다.
    # myapp/models.py from django.db import models class MyModel(models.Model): name = models.CharField(max_length=100) description = models.TextField() def __str__(self): return self.name
  5. 마이그레이션 및 데이터베이스 업데이트
    모델 변경을 적용하기 위해 마이그레이션을 생성하고 데이터베이스를 업데이트합니다.
    python manage.py makemigrations python manage.py migrate
  6. 슈퍼유저 생성
    Django 관리자에 로그인할 수 있는 슈퍼유저를 생성합니다.이 명령을 실행하면 관리자 계정을 만들 수 있습니다.
    python manage.py createsuperuser
  7. 관리자 URL 활성화
    myproject/urls.py 파일에서 관리자 URL을 활성화합니다.
    # myproject/urls.py from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ]
  8. 서버 실행
    개발 서버를 실행하여 확인합니다.이제 브라우저에서 http://127.0.0.1:8000/admin/로 이동하여 방금 생성한 슈퍼유저 계정으로 로그인하면 Django 관리자를 사용할 수 있습니다.
    python manage.py runserver

Django의 관리자 화면을 원하는 형태로 꾸미기 위해서 커스터마이징하는 방법은 여러 가지가 있습니다.

다음은 단계별로 설명된 간단한 방법입니다.

1. 장고 프로젝트 및 앱 설정

먼저, Django 프로젝트를 생성하고 앱을 추가합니다.

django-admin startproject myproject
cd myproject
python manage.py startapp myapp

myapp은 나중에 사용할 앱의 이름입니다.

2. 모델 정의

myapp/models.py 파일에서 모델을 정의합니다.

from django.db import models

class MyModel(models.Model):
    name = models.CharField(max_length=255)
    # 다른 필드 추가

3. 마이그레이션 및 관리자 등록

마이그레이션을 수행하고 모델을 관리자에 등록합니다.

python manage.py makemigrations
python manage.py migrate

myapp/admin.py 파일에 다음 코드를 추가합니다.

from django.contrib import admin
from .models import MyModel

admin.site.register(MyModel)

4. 관리자 사용자 생성

python manage.py createsuperuser

5. 템플릿 폴더 생성

프로젝트 폴더 내에 templates/admin 폴더를 생성합니다.

6. 템플릿 파일 생성

templates/admin/base_site.html 파일을 만들고 다음과 같이 내용을 추가합니다.

{% extends "admin/base_site.html" %}

{% block extrastyle %}
    {{ block.super }}
    <link rel="stylesheet" type="text/css" href="{% static 'admin/my_custom.css' %}">
{% endblock %}

7. CSS 파일 생성

static/admin/my_custom.css 파일을 만들고 원하는 스타일을 추가합니다.

8. 커스텀 뷰 및 템플릿

myapp/views.py 파일에 커스텀 뷰를 정의하고, 템플릿 파일을 작성합니다.

from django.shortcuts import render

def custom_admin_view(request):
    # 원하는 로직 추가
    return render(request, 'admin/my_custom_view.html')

templates/admin/my_custom_view.html 파일을 만들고 내용을 추가합니다.

{% extends "admin/base_site.html" %}

{% block content %}
    <!-- 내용 추가 -->
{% endblock %}

9. URL 패턴 추가

myproject/urls.py 파일에 URL 패턴을 추가합니다.

from django.contrib import admin
from django.urls import path
from myapp.views import custom_admin_view

urlpatterns = [
    path('admin/', admin.site.urls),
    path('admin/custom/', custom_admin_view, name='custom_admin_view'),
]

10. 관리자 메뉴에 링크 추가

templates/admin/base_site.html 파일을 열고 원하는 위치에 링크를 추가합니다.

<li><a href="{% url 'admin:custom_admin_view' %}">Custom View</a></li>

11. 실행

서버를 실행하고 http://127.0.0.1:8000/admin/에 접속하여 변경된 관리자 화면을 확인합니다.

python manage.py runserver

 

Django 관리자 화면을 세부적으로 커스터마이징을 통해서, 프로젝트에 따라 더 많은 기능을 추가할 수 있습니다. Django 프로젝트에 Elastic APM을 적용하기 위한 Django 설치부터 APM 적용까지 각 단계를 정리합니다.

1. Django 설치

다음 명령어를 사용하여 Django를 설치할 수 있습니다.

$ pip install django

또는 requirements.txt 파일에 추가하여 설치할 수도 있습니다.

django>=3.2,<4.0

설치가 완료되면, Django 프로젝트를 생성합니다.

$ django-admin startproject myproject

2. Elastic APM 설치

Elastic APM 에이전트를 설치하려면 다음 명령어를 사용하세요.

$ pip install elastic-apm

또는 requirements.txt 파일에 추가합니다.

elastic-apm>=6.2

3. Django 설정

Elastic APM을 Django 프로젝트에 설정하려면 다음 단계를 따르세요.

3.1 INSTALLED_APPS에 추가

settings.py 파일을 열고, INSTALLED_APPS 목록에 elasticapm.contrib.django를 추가합니다.

INSTALLED_APPS = [
    # ...
    'elasticapm.contrib.django',
]

3.2 서비스 이름 및 비밀 토큰 설정

Elastic APM 설정을 settings.py 파일에 추가합니다. 서비스 이름과 비밀 토큰을 설정합니다.

ELASTIC_APM = {
    'SERVICE_NAME': '<SERVICE-NAME>',
    'SECRET_TOKEN': '<SECRET-TOKEN>',
}

또는 환경 변수로 설정할 수도 있습니다.

export ELASTIC_APM_SERVICE_NAME=<SERVICE-NAME>
export ELASTIC_APM_SECRET_TOKEN=<SECRET-TOKEN>

이제 기본적인 에러 로깅이 설정되었으며, HTTP 500 상태 코드를 반환하는 모든 요청이 APM 서버에 보고됩니다.

4. 성능 메트릭 수집

성능 메트릭을 수집하려면, 에이전트가 자동으로 미들웨어를 추가합니다. settings.py 파일의 MIDDLEWARE 목록을 확인합니다.

MIDDLEWARE = [
    # ...
    'elasticapm.contrib.django.middleware.TracingMiddleware',
    # ...
]

자동 삽입을 비활성화하려면 django_autoinsert_middleware 설정을 참조하십시오.

5. 커스텀 코드 계측

커스텀 코드의 성능을 더 자세히 분석하려면, Elastic APM 문서의 Custom Instrumentation 섹션을 참조하십시오.

6. 특정 뷰 무시

특정 뷰를 무시하려면 TRANSACTIONS_IGNORE_PATTERNS 설정을 사용합니다.

ELASTIC_APM['TRANSACTIONS_IGNORE_PATTERNS'] = ['^OPTIONS ', 'views.api.v2']

7. 라우트를 트랜잭션 이름으로 사용

Django 2.2 이상에서는 라우트를 트랜잭션 이름으로 사용할 수 있습니다.

ELASTIC_APM['DJANGO_TRANSACTION_NAME_FROM_ROUTE'] = True

8. RUM 에이전트와 통합

브라우저 성능 측정을 위해 RUM (Real User Monitoring) 에이전트와 통합할 수 있습니다. 이를 위해 템플릿 컨텍스트 프로세서를 추가합니다. settings.py 파일의 TEMPLATES 설정을 업데이트합니다.

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'OPTIONS': {
            'context_processors': [
                # ...
                'elasticapm.contrib.django.context_processors.rum_tracing',
            ],
        },
    },
]

그런 다음, RUM 에이전트를 초기화하는 코드를 업데이트합니다.

elasticApm.init({
    serviceName: "my-frontend-service",
    pageLoadTraceId: "{{ apm.trace_id }}",
    pageLoadSpanId: "{{ apm.span_id }}",
    pageLoadSampled: {{ apm.is_sampled_js }}
});

9. 에이전트 활성화 및 비활성화

개발 중에 에이전트를 비활성화하려면 Django의 DEBUG 옵션을 True로 설정합니다. 에러 로깅을 강제로 활성화하려면 다음과 같이 설정할 수 있습니다.

ELASTIC_APM = {
    'SERVICE_NAME': '<SERVICE-NAME>',
    'DEBUG': True,
}

10. Python 로깅 통합

Elastic APM의 LoggingHandler를 사용하여 Python 로깅 메시지를 Elasticsearch로 전송할 수 있습니다. settings.py 파일에 로깅 설정을 추가합니다.

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
    },
    'handlers': {
        'elasticapm': {
            'level': 'WARNING',
            'class': 'elasticapm.contrib.django.handlers.LoggingHandler',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        }
    },
    'loggers': {
        'django.db.backends': {
            'level': 'ERROR',
            'handlers': ['console'],
            'propagate': False,
        },
        'mysite': {
            'level': 'WARNING',
            'handlers': ['elasticapm'],
            'propagate': False,
        },
        'elasticapm.errors': {
            'level': 'ERROR',
            'handlers': ['console'],
            'propagate': False,
        },
    },
}

이제 mysite Django 앱의 모듈에서 로깅을 사용할 수 있습니다.

import logging

logger = logging.getLogger('mysite')

try:
    instance = MyModel.objects.get(pk=42)
except MyModel.DoesNotExist:
    logger.error(
        'Could not find instance, doing something else',
        exc_info=True
    )

11. 추가 데이터 전송

추가 데이터를 전송하려면 다음과 같이 로깅합니다.

import logging

logger = logging.getLogger('mysite')

try:
    instance = MyModel.objects.get(pk=42)
except MyModel.DoesNotExist:
    logger.error(
        'There was some crazy error',
        exc_info=True,
        extra={
            'datetime': str(datetime.now()),
        }
    )

12. Celery 통합

Elastic APM은 Celery 태스크에서 자동으로 에러를 기록하고 성능 데이터를 수집합니다. 일반적인 Django와 Celery 설정 방법은 Celery의 Django Documentation을 참조하세요.

13. HTTP 404 에러 로깅

기본적으로 Elastic APM은 HTTP 404 에러를 로깅하지 않습니다. 이를 로깅하려면 MIDDLEWARECatch404Middleware를 추가합니다.

MIDDLEWARE = [
    # ...
    'elasticapm.contrib.django.middleware.Catch404Middleware',
    # ...
]

14. 테스트 중 에이전트 비활성화

테스트 중에 에이전트가 데이터를 전송하지 않도록 하려면 ELASTIC_APM_DISABLE_SEND 환경 변수를 true로 설정합니다.

ELASTIC_APM_DISABLE_SEND=true python manage.py test

15. 문제 해결

Elastic APM은 설정을 확인하는 Django 명령어를 제공합니다. 설정을 확인하려면 다음 명령어를 실행합니다.

python manage.py elasticapm check

테스트 예외를 보내려면 다음 명령어를 실행합니다.

python manage.py elasticapm test

성공적으로 예외가 전송되면 다음과 같은 메시지가 출력됩니다.

Success! We tracked the error successfully! You should be able to see it in a few seconds.

이 단계를 따르면 Django 프로젝트에 Elastic APM을 적용하고 설정할 수 있습니다.

728x90

댓글