1.python manage.py startapp projectapp 을 통한 projectapp 생성
main setting 에서 해당 앱을 사용한다고 명시.
urls.py에서 path를 등록한다.
해당 projectapp에서 urls.py 파일을 생성하고 forms.py도 생성한다.
해당 projectapp models.py에서 모델을 생성한다.
python manage.py makemigrations 와python manage.py migrate 를 통해서 DB연동을 수행한다.
forms.py 와 views.py 및 각각의 코드들을 이용하여 코드들을 작성한다.
views.py에는 Create, Detail, Listview 총 3가지의 view를 작성하여 수행한다.
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
from django.urls import reverse
from django.utils.decorators import method_decorator
from django.views.generic import CreateView, DetailView, ListView
from projectapp.forms import ProjectCreationForm
from projectapp.models import Project
# Create your views here.
@method_decorator(login_required, 'get')
@method_decorator(login_required, 'post')
class ProjectCreateView(CreateView):
model = Project
form_class = ProjectCreationForm
template_name = 'projectapp/create.html'
def get_success_url(self):
return reverse('projectapp:detail', kwargs={'pk': self.object.pk})
class ProjectDetailView(DetailView):
model = Project
context_object_name = 'target_project'
template_name = 'projectapp/detail.html'
class ProjectListView(ListView):
model = Project
context_object_name = 'project_list'
template_name = 'projectapp/list.html'
paginate_by = 25
models.py에는 Project라는 모델을 생성하고 이 때 모델에는
image, title, description, created_at 속성 4가지를 설정한다.
from django.db import models
# Create your models here.
class Project(models.Model):
image = models.ImageField(upload_to='project/', null=True)
title = models.CharField(max_length=20, null=False)
description = models.CharField(max_length=200, null=True)
created_at = models.DateTimeField(auto_now=True)
forms.py에는 ProjectCreationForm 을 사용한다.
from django.forms import ModelForm
from projectapp.models import Project
class ProjectCreationForm(ModelForm):
class Meta:
model = Project
fields = ['image', 'title', 'description']
또한 view에 사용되는 html 파일들을 생성하는데 이때 projectapp 에서 templates디렉토리, 거기서 또 projectapp이라는 디렉토리 안에 html 파일들을 생성한다.
crate.html은 project를 생성하는 부분을 담당하는 html 파일이고
detail.html은 생성한 project를 자세히 보는 담당,
list.html 은 존재하는 project를 확인할 수 있는 담당이다
이 3개의 html 파일은 base.html을 기반으로 하기 때문에
{% extends 'base.html' %} 을 코드 맨 앞에 명시해주어야한다.