프로젝트 생성
- 먼저 앱을 구동할 Django 프로젝트를 설치한다.
$ django-admin startproject TodoList
- django 명령어를 실행하기 위해
manage.py
가 있는 프로젝트 폴더 안으로 이동한다.$ cd TodoList
runserver
명령을 통해 프로젝트를 실행해본다.$ python manange.py runserver
앱 생성 및 등록
- 만들고자 하는 앱(Todo_app)을 생성한다.
$ python manage.py startapp todo_app
- 생성된 앱을 프로젝트에 등록한다.
프로젝트 폴더에
settings.py
에서INSTALLED_APPS
에 앱 이름을 추가한다. (쉼표 주의)INSTALLED_APPS = [ ... 'django.contrib.staticfiles', 'todo_app' ]
- 생성된 앱의 url을 찾아갈 수 있도록 프로젝트에 등록한다.
프로젝트 폴더에
urls.py
에서urlpatterns
에 앱의urls.py
를 추가한다.(앱에서
urls.py
는 자동으로 생성되지 않으니 직접 생성해야한다.)urlpatterns = [ path('admin/', admin.site.urls), path('', include('todo_app.urls')), ]
Model 정의
- Model은 총 3가지 단계를 거쳐 생성된다.
models.py
에 클래스 형태로 정의
makemigrations
명령을 통해 DB에 적용할 파일 생성
migrate
명령을 통해 migration 파일 DB에 적용
1. modes.py 정의
models.py
에 model을 정의하기 위한 entity를 클래스로 정의한다.
- 클래스에
models.Model
을 상속받아 관리하도록 하고 DB에서 관리할 column를 정의한다.class Todo(models.Model): title = models.CharField(max_length=255)
2. makemigrations
- model을 정의하고
makemigrations
하면models.py
에 정의한 모델의migration
파일이 생성된다.⇒
models.py
를 수정하면 반드시makemigration
을 해야한다.$ python manage.py makemigrations
실행되면 아래와 같이 어떤 model에 대해서 파일이 생성되었는지 보여준다.
- 생성된 파일을 살펴보면 기본적으로
id
필드를 생성해주며 정의한title
필드가 추가된 모습을 볼 수 있다.TodoList/todo_app/migrations/0001_initial.py
3. migrate
- migration에 생성된 파일을 가지고 DB에 변경사항을 적용하기 위해
migrate
명령을 실행한다.$ python manage.py migrate
실행되면 어떤 migration 파일이 적용되었는지 보여준다.
* DB 확인
dbshell
명령을 통해 DB에 제대로 적용이 됐는지 확인할 수 있다.$ python manage.py dbshell
sqlite
도 기본적인 SQL문법과 같으니 몇가지 데이터를 넣어서 동작을 확인한다.# 데이터 삽입 sqlite> insert into todo_app_todo(title) values('Fisrt'); # 데이터 확인 sqlite> select * from todo_app_todo; 1|Fisrt # 데이터 삭제 sqlite> delete from todo_app_todo; sqlite> select * from todo_app_todo; # rollback이나 commit 명령은 동작하지 않는다. sqlite> rollback; Error: cannot rollback - no transaction is active sqlite> commit; Error: cannot commit - no transaction is active
View 정의
- view를 담아둘
templates
라는 폴더를 만든다.$ cd todo_app $ mkdir templates
- 폴더에
index.html
을 만들고 기본 페이지로 쓰고 싶은 페이지를 작성한다.$ cd templates $ touch index.html
Controller 정의
- controller는 크게 두가지를 정의해야한다.
views.py
에 view와 연결시킬 함수 정의
urls.py
에views.py
에 정의한 함수와 연결될 url 정의
1. view 함수 정의
views.py
에 controller를 정의하기 위해 view와 연결할 함수를 생성한다.
- 정의할 함수는 아래와 같다.
index
: 시작 페이지 renderDB에서 모든 값을 가져와
index.html
에 인자로 넘겨준다.from django.shortcuts import render # url = '' def index(request): _todos = Todo.objects.all() return render(request, 'index.html', {'todos': _todos})
create_todo
: 할일 추가POST로
todoContent
라는 name의 값을 받아와 model클래스에 정의된Todo
객체를 만들어 DB에 저장(save)한다.저장한 후 redirect를 통해 index 페이지로 돌아간다.
from django.shortcuts import HttpResponseRedirect from todo_app.models import Todo from django.urls import reverse # url = /create_todo def create_todo(request): content = request.POST['todoContent'] new_todo = Todo(title=content) new_todo.save() return HttpResponseRedirect(reverse('index'))
delete_todo
: 할일 삭제GET방식으로
todoNum
이라는 name의 값을 받아와 DB에서id
값으로 찾는다.찾은 데이터를 삭제(delete)하고 redirect를 통해 index페이지로 돌아간다.
# url = /delete_todo def delete_todo(request): _id = request.GET['todoNum'] todo = Todo.objects.get(id=_id) todo.delete() return HttpResponseRedirect(reverse('index'))
url 패턴 등록
- 앱 폴더안에
urls.py
를 추가한다.
- 앱 내부에서 controller와 view를 연결할 수 있도록
urlpatterns
를 등록한다.from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index') ]
실행화면
Uploaded by Notion2Tistory v1.1.0