[Vue-Django] Class 형 View

JeongChaeJin·2022년 9월 7일
0

Vue-Django

목록 보기
4/14

  • 웹 프로그래밍 시 자주 쓰이는 것에 대한 Template view는 Django에서 이미 제공하고 있다.
  • List View : DB에서 레코드 목록을 가져와 보여주는 View
  • CreateView : Form에 입력한 내용으로 DB에 레코드를 생성하는 View
  • UpdateView : DB에 있는 특정 레코드를 수정하는 View
  • DeleteView : DB에 있는 특정 레코드를 삭제하는 View

model 등록

from django.db import models


class Todo(models.Model):
    name = models.CharField('NAME', max_length=5, blank=True)
    todo = models.CharField('TODO', max_length=50)

    def __str__(self):
        return self.todo
  • models.py에 해당 "테이블"을 정의한다고 생각하면된다.
  • admin site에서도 보려면 admin.pyㄴ에 정의해두어야한다.
from django.contrib import admin

from todo.models import Todo


@admin.register(Todo)
class TodoAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'todo')
  • admin.py
  • regitser decorator가 깔끔하고 좋다.
  • list_display는 admin site에서 보여줄 컬럼의 name이다.

python manage.py showmigrations

  • 현재 migration 상태확인

`python manage.py makemigrations

  • migration 파일 생성

python manage.py migrate

  • migration 진행

View.py

from django.urls import reverse_lazy
from django.views.generic import TemplateView, CreateView, ListView, DeleteView
from django.views.generic.list import MultipleObjectMixin

from todo.models import Todo


class TodoVueOnlyTV(TemplateView):
    template_name = 'todo/todo_vue_only.html'


class TodoCV(CreateView):
    model = Todo
    fields = '__all__'
    template_name = 'todo/todo_form.html'
    success_url = reverse_lazy('todo:list')


class TodoLV(ListView):
    model = Todo
    template_name = 'todo/todo_list.html'


class TodoDelV(DeleteView):
    model = Todo
    template_name = 'todo/todo_confirm_delete.html'
    success_url = reverse_lazy('todo:list')


class TodoMOMCV(MultipleObjectMixin, CreateView):
    model = Todo
    fields = '__all__'
    template_name = 'todo/todo_form_list.html'
    success_url = reverse_lazy('todo:mixin')

    def get(self, request, *args, **kwargs):
        self.object_list = self.get_queryset()
        return super().get(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        self.object_list = self.get_queryset()
        return super().post(request, *args, **kwargs)


class TodoDelV2(DeleteView):
    model = Todo
    # template_name = 'todo/todo_confirm_delete.html'
    success_url = reverse_lazy('todo:mixin')

    def get(self, request, *args, **kwargs):
        return self.delete(request, *args, **kwargs)
  • model 정의
  • template name 정의
  • fields는 __all__ 할 경우 전체 필드를 지정하는 것이다.
  • form 처리 끝난 후 처리할 reverse_lazy(url) 지정
    • success_url을 지정할 때는 reverse_lazy를 사용한다.
      • 해당 line이 실행되는 시점에는 urls.py 모듈이 로딩이 안된 상태이기 때문에 reverse_lazy 사용
    • form 처리가 끝나면 redirect가 필요하기 때문에 지정한다.
profile
OnePunchLotto

0개의 댓글