Django의 주목할 만한 특징은 CRUD(생성, 읽기, 업데이트, 삭제) 기능을 기반으로 프로젝트를 구성하는 통합 기능입니다. 장고의 클래스 기반 뷰는 웹 애플리케이션을 구축하는 데 신속하고 편리하며 다양한 방법을 제공하지만, 많은 개발자가 함수 기반 뷰를 계속 사용하고 있습니다.

클래스 기반 뷰를 활용하면 상속, 향상된 코드 구성, 향상된 코드 재사용 기능 등 함수 기반 뷰에 비해 많은 이점을 얻을 수 있습니다. 클래스 기반 보기의 구현 프로세스는 언뜻 보기에 다소 복잡해 보일 수 있지만, 이 매뉴얼에서는 작업 관리 애플리케이션을 구성하고 각 단계에 대한 자세한 지침을 제공함으로써 이 주제에 대해 명확하게 설명할 것입니다.

장고에서 클래스 기반 뷰란 무엇인가요?

Django의 뷰는 들어오는 웹 요청을 처리하고 해당 웹 응답을 생성하는 Python 함수입니다. 또는 클래스 기반 뷰(CBV)를 사용하여 기존 함수가 아닌 Python 클래스 구현을 통해 뷰를 정의할 수 있습니다.

“CBV는 코드 구조 개선, 코드 재사용 용이성, 생성 시 상속 활용 가능성 등 여러 가지 이점을 제공합니다.보기

장고에서 사용 가능한 클래스 기반 뷰

장고 프레임워크는 엔터티 목록 렌더링 및 새 엔터티 생성 등 일반적인 애플리케이션에 적합한 사전 구축된 클래스 기반 뷰(CBV) 셀렉션을 제공합니다. 이러한 사전 정의된 CBV의 몇 가지 예는 다음과 같습니다:

ListView는 모델에서 가져온 항목의 컬렉션을 표시하는 인터페이스입니다. 일반적인 예로는 블로그에 있는 글 목록을 표시하는 웹 페이지가 있으며, 이 웹 페이지는 ListView를 사용하여 렌더링합니다.

DetailView는 데이터 모델에서 얻은 단일 엔티티에 대한 포괄적인 관점을 보여주는 예시입니다. 블로그 애플리케이션 내에서 특정 기사의 세부 사항을 표시하는 수단으로 활용될 수 있습니다.

CreateView 컴포넌트는 사용자가 새로운 엔티티를 생성할 수 있는 양식을 표시하는 데 활용되며, 해당 양식의 제출을 관리하기도 합니다. 예를 들어, 작업 관리 애플리케이션 내에서 새로운 작업을 만들 때 이 보기를 사용할 수 있습니다.

삭제 뷰는 특정 항목의 삭제 결정을 확인하는 확인 화면을 표시하고 해당 페이지를 존재하지 않게 제거하는 프로세스를 관리합니다.

UpdateView는 기존 엔티티를 수정하기 위한 양식을 제시하고, 해당 양식의 제출을 관리하는 컴포넌트입니다.

장고는 TemplateView, RedirectView 및 FormView를 포함한 다른 뷰도 제공합니다.클래스 기반 뷰에 대한 자세한 내용은 Django 문서 을 참조하세요.

장고 클래스 기반 뷰로 작업 관리자 앱 빌드

작업 관리자 애플리케이션은 장고에서 클래스 기반 뷰(CBV)를 활용하여 CRUD 작업의 구현을 이해하는 데 유용한 예제입니다. 이러한 유형의 애플리케이션을 통해 사용자는 CRUD 작업의 원칙에 따라 작업 생성, 업데이트, 삭제 및 보기와 같은 작업을 수행할 수 있습니다. 후속 지침을 준수하면 Django의 CBV를 사용하여 기능적인 작업 관리자 애플리케이션을 구성할 수 있습니다.

Django 프로젝트 설정

이 문장을 좀 더 정교한 언어로 바꾸는데 도움을 주실 수 있나요?

다음 명령을 사용하여 Python 가상 환경 내에 Django를 설치하세요:

Django 프로젝트를 만드는 과정에는 특정 명령을 실행하는 과정이 포함되며, 이 경우 “project\_core”라는 이름의 프로젝트가 설정됩니다.

앞서 언급한 프로젝트에는 “task\_manager”라는 애플리케이션의 개발이 포함됩니다.

INSTALLED\_APPS 목록에 앱 이름을 추가하여 설정 파일 내 설치된 앱 목록에 애플리케이션이 포함되어 있는지 확인하세요.

이 글도 확인해 보세요:  Rust에서 기본 HTTP 웹 서버를 빌드하는 방법

프로젝트 디렉토리에 있는 “urls.py” 파일을 열고 “task\_manager” 애플리케이션의 URL 경로를 설정하는 데 필요한 단계를 수행하세요.

작업 관리자 앱의 모델 만들기

제공된 샘플 모델을 참조하여 작업 관리 애플리케이션의 새 모델을 만들기 위해 “models.py” 파일을 여는 작업을 설명하는 데 사용할 수 있는 대체 텍스트를 제공해 주세요.

 from django.db import models

class Task(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField()
    completed = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)

 python manage.py makemigrations && python manage.py migrate

앱용 Django 양식 만들기

애플리케이션 내에서 생성 및 업데이트 프로세스를 모두 관리할 수 있는 양식을 통합하는 것이 좋습니다. 이를 위해 앱 디렉토리에 ‘forms.py’라는 파일을 생성하세요. 이를 구현한 샘플은 다음과 같습니다:

 from django import forms
from .models import Task

class TaskForm(forms.ModelForm):
    class Meta:
        model = Task
        fields = ['title', 'description', 'completed']

        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control',}),
            'description': forms.Textarea(attrs={'class': 'form-control',}),
            'completed': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
        }

이 코드는 사용된 모델을 지정하는 것 외에도 양식의 구성 요소와 대화형 요소를 설명하는 “TaskForm”이라는 클래스를 구현합니다.

각 CRUD 작업에 대한 Django 뷰 만들기

명령 동작 벡터를 활용하는 기본적인 CRUD 애플리케이션은 모든 작업을 능숙하게 관리하기 위해 최소 4개의 관점을 필요로 합니다. 다음 섹션에서는 이러한 관점을 만드는 과정을 보여드리겠습니다.

필요한 모듈 및 패키지 가져오기

django import forms에서 가져오기 django.shortcuts에서 렌더, 리디렉션 가져오기 “`python .models에서 상주, 종속 가져 오기 .forms에서 ResidentForm, DependentForm을 가져옵니다. “` 다음으로, `python manage.py createsuperuser` 명령을 실행하여 `views` 폴더에 `residents`라는 새 보기를 만듭니다. 이렇게 하면 프로젝트에 `urls.py` 및 `residents_view`라는 두 개의 새 파일이 추가되며, 이를 편집해야 합니다. residents_view` 파일에서 `# 상주자 목록을 표시하는 기본 보기`라고 표시된 줄을 제외한 모든 코드를 삭제하고 나중에 다시 설명하겠습니다. urls.py` 파일에서 맨 위에 다음 줄을 추가합니다: “`css from django.urls 가져오기 경로

 from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import Task
from .forms import TaskForm

앞서 언급한 코드는 5개의 협력 기반 보기(CBV)를 가져오며, 양식을 제출할 때 사용자를 지정된 웹 페이지로 안내하기 위한 reverse\_lazy도 가져옵니다. 또한 이전에 설정한 작업 모델과 작업 양식도 포함됩니다.

모델 개체를 나열하는 보기 만들기

작업 관리 애플리케이션을 활용하려면 사용자가 생성한 모든 작업을 표시하는 페이지가 포함되어야 합니다. 이러한 보기를 구성하려면 ListView 컴포넌트를 사용하는 것이 좋습니다. 다음은 그 구현에 대한 데모입니다:

 class TaskListView(ListView):
    model = Task
    template_name = 'task_manager/task_list.html'
    context_object_name = 'tasks'

아름다움, 두뇌 및 성격 “두뇌”라는 단어를 “지능”으로 바꿔주세요.

특정 모델의 활용도는 특정 관점에 대해 이 특성에 의해 지정됩니다.

“template\_name” 태그는 최종 사용자의 웹 브라우저에 표시되어야 하는 템플릿의 지정을 지정하며, 이는 Django 프레임워크에 의해 결정됩니다.

“context\_object\_name” 속성은 모델 내의 엔티티 카탈로그를 검색할 수 있도록 템플릿에 할당된 식별자를 지정합니다.

일반적인 연속 비즈니스 가치(CBV)에는 세 가지 주요 특성이 포함될 수 있습니다.

작업 세부 정보를 처리하는 뷰 만들기

사용자가 각 작업을 생성하려면 해당 작업과 관련된 포괄적인 정보를 개별 페이지에 표시해야 하는데, 이를 DetailView라고 합니다. 이 기능의 기본 그림은 아래에서 확인할 수 있습니다:

 class TaskDetailView(DetailView):
    model = Task
    template_name = 'task_manager/task_detail.html'

작업 생성을 위한 뷰 만들기

새 작업을 생성하거나 추가하는 프로세스를 용이하게 하는 뷰를 구현하려면 CRUD(생성, 읽기, 업데이트, 삭제) 시스템 내에서 이러한 작업을 처리하는 데 적합한 구성 요소인 CreateView를 활용해야 합니다. 이 뷰를 사용하려면 다음 단계를 따르세요:

 class TaskCreateView(CreateView):
    model = Task
    form_class = TaskForm
    template_name = 'task_manager/task_form.html'
    success_url = reverse_lazy('task_list')

앞서 언급한 코드에 두 가지 새로운 속성, 즉 “form\_class” 및 “success\_url”이 추가되었습니다.

이 글도 확인해 보세요:  파이썬을 사용하여 FLAMES 게임 플레이하기

`form_class` 속성은 뷰에서 해당 함수에 대해 시각화 및 활용해야 하는 특정 양식 클래스를 지정합니다.

`success_url` 매개 변수는 최종 사용자가 양식을 제출한 후 리디렉션하기 위한 프로토콜을 지정합니다. 이 매개변수는 URL 경로의 식별자를 기반으로 하는 `reverse_lazy` 함수를 활용합니다.

작업 편집을 위한 보기 만들기

다음은 사용자에게 웹 인터페이스를 통해 할당된 작업을 수정할 수 있는 기능을 제공하는 방법의 예입니다. 이는 다음 형식과 유사한 보기를 구현하여 수행할 수 있습니다:

 class TaskUpdateView(UpdateView):
    model = Task
    form_class = TaskForm
    template_name = 'task_manager/task_form.html'
    success_url = reverse_lazy('task_list')

앞서 설명한 관점은 업데이트 뷰를 대신 사용한다는 점을 제외하면 이전에 설정한 TaskCreate뷰와 유사합니다.

삭제 작업을 처리하는 뷰 만들기

DeleteView 연속 기반 뷰(CBV)를 활용하면 사용자가 재량에 따라 작업을 삭제할 수 있습니다. 데모 사례는 다음과 같습니다:

 class TaskDeleteView(DeleteView):
    model = Task
    template_name = 'task_manager/task_confirm_delete.html'
    success_url = reverse_lazy('task_list')

앱의 URL 구성

애플리케이션의 디렉토리에 ‘urls.py’라는 파일을 생성하고 다음 지침에 따라 URL 패턴에 대한 구성을 조절하세요:

 from django.urls import path
from .views import TaskListView, TaskDetailView, TaskCreateView, TaskUpdateView, TaskDeleteView

urlpatterns =
    path('', TaskListView.as_view(), name='task_list'),
    path('create/', TaskCreateView.as_view(), name='task_create'),
    path('tasks/<int:pk>/', TaskDetailView.as_view(), name='task_detail'),
    path('tasks/<int:pk>/update/', TaskUpdateView.as_view(), name='task_update'),
    path('tasks/<int:pk>/delete/', TaskDeleteView.as_view(), name='task_delete'),
]

앞서 언급한 URL 패턴은 함수 기반 뷰에서 생성되는 패턴과 유사하지만, 모든 뷰 제목의 끝에 “as\_view()” 함수가 붙어 있다는 점을 제외하면 유사합니다.

앞서 설명한 대로 기본 키를 사용하는 대신 Django 슬러그를 사용하여 URL을 생성할 수 있습니다.

뷰용 템플릿 만들기

사용자가 애플리케이션과 상호 작용할 수 있는 플랫폼 제공은 앞서 설명한 뷰 요소의 구현에 내포되어 있습니다. 이전 구현을 기반으로 작업 관리 애플리케이션은 디자인 내에서 네 가지 사용자 인터페이스로 구성되어야 한다는 것을 유추할 수 있습니다.

앱 디렉터리에 4개의 HTML 템플릿과 base.html 파일도 만들어 주세요. 효율성을 위해 부트스트랩을 활용하여 Django 템플릿을 스타일리시하게 개선할 수 있습니다.

작업 목록 템플릿

다음 코드는 개발 중인 시스템의 특정 요구 사항과 특성에 따라 조정하거나 수정해야 할 수 있음을 이해하면서 주어진 모델 내의 모든 작업을 나열하기 위한 기본 구조를 제공합니다.”’파이썬 import gym model = “my_model” for task in gym.utils.task_descriptions(model): print(“Task:”, task)

 {% extends 'base.html' %}

{% block content %}
<center>
    <h1>Your Tasks</h1>
    <a href="{% url 'task_create' %}">Add Task</a>
      {% for task in tasks %}
      <div>
        <div>
          <h5>{{ task.title }}</h5>
          <p>{{ task.description|truncatechars:50 }}</p>
          <p>
            <strong>Completed:</strong>
            {% if task.completed %}Yes{% else %}No{% endif %}
          </p>
          <a href="{% url 'task_detail' task.pk %}">
            Read more
          </a>
          <a href="{% url 'task_delete' task.pk %}">
            Delete task
          </a>
        </div>
      </div>
        {% empty %}
          <h3>No tasks yet.</h3>
          <a href="{% url 'task_create' %}">Add Task</a>
      {% endfor %}
</center>
{% endblock %}

특정 부트스트랩 클래스를 활용하면 다음과 유사한 모양의 웹페이지를 만들 수 있습니다:

이 글도 확인해 보세요:  슬랙에서 나만의 사용자 지정 슬래시 명령 만들기

작업 상세 템플릿

[설명 삽입] 상태: [상태 삽입] 상태 마감일: [마감일 삽입] 할당 대상: [작업에 할당된 사람 이름 삽입] [작업 할당자 이름 삽입] ### 다이어그램: 다음은 이 기능이 어떻게 작동하는지 보여주는 간단한 다이어그램으로, 나중에 입력할 정보를 위한 자리 표시자가 있습니다: “`diff +————————–+ +—————+ +——-+ +—>| | | <--- 작업 제목 삽입 ---> | | | | | 작업 세부 정보 | <--- 설명 삽입 ---> | | | | | | <--- 상태 삽입 ---> | | | | | | <--- 마감일 삽입 --->

 {% extends 'base.html' %}

{% block content %}
<h1>{{ task.title }}</h1>
<p>{{ task.description }}</p>
<p>Completed: {% if task.completed %}Yes{% else %}No{% endif %}</p>
<a href="{% url 'task_update' task.pk %}">Edit task</a>
<a href="{% url 'task_delete' task.pk %}">Delete task</a>
{% endblock %}

웹 페이지의 모양은 스타일링 방법에 따라 달라질 수 있으며 다음과 비슷할 수 있습니다:

작업 양식 템플릿

설명하신 템플릿은 일반적으로 프로젝트 관리 소프트웨어에서 볼 수 있는 작업 생성 및 업데이트를 위한 일반적인 디자인 패턴입니다. 여기에는 HTML 구조 내의 양식 요소를 활용하여 사용자가 제목, 설명, 마감일, 우선순위 수준 및 상태 업데이트와 같이 할당된 작업에 관한 정보를 입력할 수 있도록 하는 것이 포함됩니다. 이를 통해 진행 상황을 효율적으로 추적하고 팀원 간의 책임감을 보장할 수 있습니다.

 {% extends 'base.html' %}

{% block content %}
  <h1>Create Task</h1>
  <form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Save</button>
  </form>
{% endblock %}

[작업 삽입] 방법을 찾고 계신 것으로 알고 있습니다. 이를 위해 [도구 또는 방법]을 사용하는 것이 좋습니다. 이 [도구 또는 방법]은 [도구 또는 방법의 이점 삽입]이 가능하기 때문에 특히 유용합니다. 예를 들어, 새로운 언어를 배우려고 한다면 듀오링고와 같은 언어 학습 앱을 사용할 수 있습니다. 이 앱은 대화형 레슨을 제공하고 진행 상황을 추적할 수 있기 때문에 매우 유용합니다. 또한 같은 언어를 배우는 다른 사용자와도 연결할 수 있습니다.

작업 템플릿 삭제

의도치 않은 업무 삭제를 방지하려면 확인 페이지가 반드시 필요하며, 이는 사용자가 작업을 삭제하려는 의도가 확실하고 신중한 것임을 확인하는 역할을 합니다.

 {% extends 'base.html' %}

{% block content %}
  <h1>Confirm Delete</h1>
  <p>Are you sure you want to delete "{{ object.title }}"?</p>
  <form method="post">
    {% csrf_token %}
    <button type="submit">Delete</button>
    <a href="{% url 'task_list' %}">Cancel</a>
  </form>
{% endblock %}

부트스트랩을 사용하여 웹페이지가 유사한 방식으로 표시되어야 합니다.

클래스 기반 뷰를 사용하여 생산성 향상

클래스 기반 뷰는 최소한의 노력으로 잘 구조화되고 간소화된 코드를 작성하는 효율적인 방법을 제공하여 생산성 향상으로 이어진다고 주장할 수 있습니다.이러한 보기를 가능한 한 자주 업무에 통합하는 것이 좋습니다. 또한 검색 기능 및 알림과 같은 추가 기능을 통합하면 종합적이고 다재다능한 작업 관리 애플리케이션이 될 수 있습니다.

By 박준영

업계에서 7년간 경력을 쌓은 숙련된 iOS 개발자인 박준영님은 원활하고 매끄러운 사용자 경험을 만드는 데 전념하고 있습니다. 애플(Apple) 생태계에 능숙한 준영님은 획기적인 솔루션을 통해 지속적으로 기술 혁신의 한계를 뛰어넘고 있습니다. 소프트웨어 엔지니어링에 대한 탄탄한 지식과 세심한 접근 방식은 독자에게 실용적이면서도 세련된 콘텐츠를 제공하는 데 기여합니다.