본문 바로가기
Python 웹 프레임워크/Django 4.2

[Django 4] 프레임워크 특징 및 소개

by cogito21_python 2024. 7. 3.
반응형

Django 특징

1. 정해진 MVT에 맞추어 빠른 웹 개발이 가능

2. 웹 개발에 필요한 기능들(인증, sitemap, rss feed 등)이 탑재

3. 일반적인 보안 기능을 구현 및 사용자 인증시스템을 제공하여 보안의 안전성을 높임

4. 빠르고 유연하게 확장 가능

5. 다양한 플랫폼 개발에 사용

 

Django 소개

1. ORM(object-relational mapper)

- 데이터모델들을 파이썬으로 정의하여 데이터베이스 접근 API를 제공

from django.db import models


class Band(models.Model):
    """A model of a rock band."""

    name = models.CharField(max_length=200)
    can_rock = models.BooleanField(default=True)


class Member(models.Model):
    """A model of a rock band member."""

    name = models.CharField("Member's name", max_length=200)
    instrument = models.CharField(
        choices=(
            ("g", "Guitar"),
            ("b", "Bass"),
            ("d", "Drums"),
        ),
        max_length=1,
    )
    band = models.ForeignKey("Band")

 

2. URLs와 views

- 깔끔하고 우아한 URL scheme을 위하여 URL 디자인 장려

- URLconf 모듈을 제작하여 URL을 디자인. 

# urls.py
from django.urls import path

from . import views

urlpatterns = [
    path("bands/", views.band_listing, name="band-list"),
    path("bands/<int:band_id>/", views.band_detail, name="band-detail"),
    path("bands/search/", views.band_search, name="band-search"),
]
# views.py
from bands.models import Band
from django.shortcuts import render


def band_listing(request):
    """A view of all bands."""
    bands = Band.objects.all()
    return render(request, "bands/band_listing.html", {"bands": bands})

3. Templates

- 템플릿 언어는 기존의 HTML언어와 함께 사용 가능

<body>
<h1>All Bands</h1>
<ul>
{% for band in bands %}
  <li>
    <h2><a href="{{ band.get_absolute_url }}">{{ band.name }}</a></h2>
    {% if band.can_rock %}<p>This band can rock!</p>{% endif %}
  </li>
{% endfor %}
</ul>
</body>

4. Forms

- HTML의 form을 작성하기위한 라이브러리 제공.

- 제출할 데이터의 유효성 확인 및 데이터를 python에서 사용하도록 타입 변경을 처리

from django import forms


class BandContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.TextField()
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)

5. Authentication

- 기능을 갖춘 안전한 인증 시스템 제공.

- 사용자 계정, 그룹, 권한 및 쿠키 기반 사용자 세션을 처리

from django.contrib.auth.decorators import login_required
from django.shortcuts import render


@login_required
def my_protected_view(request):
    """A view that can only be accessed by logged-in users"""
    return render(request, "protected.html", {"current_user": request.user})

6. Amdin

- 자동화된 관리자 인터페이스를 제공

- 사용자 정의 관리자 페이지 제작 가능

from bands.models import Band, Member
from django.contrib import admin


class MemberAdmin(admin.ModelAdmin):
    """Customize the look of the auto-generated admin for the Member model"""

    list_display = ("name", "instrument")
    list_filter = ("band",)

    admin.site.register(Band)  # Use the default options
    admin.site.register(Member, MemberAdmin)  # Use the customized options

7. Internationalization

- 특정 지역의 언어 번역 및 날짜, 시간 기능 제공

from django.shortcuts import render
from django.utils.translation import gettext


def homepage(request):
    """
    Shows the homepage with a welcome message that is translated in the
    user's language.
    """
    message = gettext("Welcome to our site!")
    return render(request, "homepage.html", {"message": message})
{% load i18n %}
<html>
  <head>
    <title>{% trans 'Homepage - Hall of Fame' %}</title>
  </head>
  <body>
    {# Translated in the view: #}
    <h1>{{ message }}</h1>
    <p>
      {% blocktrans count member_count=bands.count %}
      Here is the only band in the hall of fame:
      {% plural %}
      Here are all the {{ member_count }} bands in the hall of fame:
      {% endblocktrans %}
    </p>
    <ul>
    {% for band in bands %}
      <li>
        <h2><a href="{{ band.get_absolute_url }}">{{ band.name }}</a></h2>
        {% if band.can_rock %}<p>{% trans 'This band can rock!' %}</p>{% endif %}
      </li>
    {% endfor %}
    </ul>
  </body>
</html>

8. Security

- 여러가지 보안 기능을 제공

 

Django Third-Party 패키지

 

1. Django Rest Framework (DRF): Django로 RESTful API를 쉽게 구축할 수 있게 도와주는 패키지입니다.

2. Celery: 비동기 작업 큐를 관리하는 데 사용됩니다. 주로 백그라운드 작업을 처리할 때 사용됩니다.

3. Django Channels: Django에 WebSocket을 추가하여 실시간 기능을 제공할 수 있습니다.

4. Django Allauth: 다양한 인증 제공자 (OAuth, SSO 등)를 지원하는 인증 패키지입니다.

5. Django Crispy Forms: 폼의 렌더링을 더 쉽게 하고, 부트스트랩과 같은 프론트엔드 프레임워크와 쉽게 통합할 수 있습니다.

6. Django Debug Toolbar: 개발 중에 디버깅을 더 쉽게 할 수 있도록 도와주는 툴바입니다.

7. Django Extensions: 유용한 명령어와 도구들을 모아놓은 패키지입니다.

8. Django Storages: Amazon S3와 같은 클라우드 스토리지 백엔드를 쉽게 통합할 수 있도록 도와줍니다.

9. Django REST Knox: DRF의 토큰 인증을 개선한 패키지로, 더 안전하고 확장 가능한 토큰 기반 인증을 제공합니다.

10. Whitenoise: Django 앱에서 정적 파일을 서빙하기 쉽게 만들어주는 패키지로, 특히 Heroku와 같은 환경에서 유용합니다.

 

 

반응형

'Python 웹 프레임워크 > Django 4.2' 카테고리의 다른 글

[Django4] 프로젝트 구조 및 코딩컨벤션  (0) 2024.07.03
[Django4] Django 버전별 특징  (1) 2024.07.01
[Django4] 목차  (0) 2024.07.01