Django Project ToDoList - 3
Page content
개요
Django 한 그릇 뚝딱
교재의 내용에서 멀티캠퍼스 강의에 맞게 일부 수정함- 2019년 버전이고 현재는 2023년이기 때문에 소스코드 변경 사항이 필요할 거 같아서 글을 남김
교재 홍보
Step 01 - 이전 내용 확인
- 이 글을 처음 봤다면, 이전 블로그를 참조하기를 바란다.
Step 02 - model.py 작성 및 장고 서버 반영
- ToDo에 대한 데이터를 다룰 예정이며, 다음과 같이 코드를 작성한다.
- 파일 경로 :
ToDoList > my_to_do_app > models.py
- 파일 경로 :
from django.db import models
# Create your models here.
class Todo(models.Model):
content = models.CharField(max_length=255)
- 위 코드를 실제 Django 서버에 등록해줘야 한다. 다음과 같은 명령어를 입력한다.
- 실행 경로는
[manage.py](http://manage.py)
이 있는 곳에서 아래 코드를 실행한다.
- 실행 경로는
$ ls
db.sqlite3 manage.py* my_to_do_app/ ToDoList/
$ python manage.py makemigrations
Migrations for 'my_to_do_app':
my_to_do_app\migrations\0001_initial.py
- Create model Todo
- 그런데, 아직 데이터베이스 모델과 같은 테이블이 생성된 것은 아니다. 다음 명령어를 추가한다.
$ python manage.py migrate
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying my_to_do_app.0001_initial... OK
Applying sessions.0001_initial... OK
Step 03 - DB 확인
- 실제 Django 프로젝트 DB에 접근해서 확인하도록 한다.
$ python manage.py dbshell
SQLite version 3.39.3 2022-09-05 11:02:23
Enter ".help" for usage hints.
sqlite>
- 테이블을 확인하기 위해서 다음 명령어를 이용한다.
- my_to_do_app_todo 테이블이 만들어졌음을 확인한다.
sqlite> .tables
auth_group django_admin_log
auth_group_permissions django_content_type
auth_permission django_migrations
auth_user django_session
auth_user_groups my_to_do_app_todo
auth_user_user_permissions
- 테이블이 가진 정보를 확인한다.
sqlite> PRAGMA table_info(my_to_do_app_todo);
0|id|INTEGER|1||1
1|content|varchar(255)|1||0
- SELECT 명령어를 통해 데이터가 있는지 확인해본다.
- 아무런 데이터가 없기 때문에 조회는 되지 않는다.
sqlite> SELECT * FROM my_to_do_app_todo;
Step 04 - HTML 코드 해석
index.html
파일을 연다.- 44번째 줄의
form 태그
를 살펴본다.
- Django에서 POST 방식 사용 시,
{% csrf_token %}
을 적어 주어야 한다. - action은 서버로 데이터를 전달할 시, 어떤 URL로 전달할 것인지를 나타낸다.
- action에 다음과 같이 작성한다.
<form action="./createTodo/" method="POST">{% csrf_token %}
- 위 코드는 아래 이미지에서 메모하기 버튼을 클릭할 때,
createTodo
라는 url로 전달되는 것을 의미한다.
Step 05 - urls.py 설정
- 코드의 흐름은 기본적으로
ToDoList > ToDoList > urls.py
로 처리하여 넘기는 것이다. - 해당 코드는 이미 21번째 라인에서 처리중인 것을 확인할 수 있다.
-
21번째 라인이 의미하는 것은
my_to_do_app
폴더에 있는urls.py
로 다시 넘기는 것을 의미한다. 기존 파일에서 수정을 한다.- 기존
# -*- coding:utf-8 -*- # my_to_do_app > urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index) ]
- 수정
# -*- coding:utf-8 -*- # my_to_do_app > urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index), path('createTodo/', views.createTodo) ]
Step 06 - views.py 설정
-
my_to_do_app
의urls.py
에서 설정한 createTodo의views
를 처리하는 함수를 만든다. 이미 함수명을createTodo
라고 지정했다.from django.shortcuts import render from django.http import HttpResponse # Create your views here. # before ''' def index(request): return HttpResponse("My_to_do_app first page") ''' # after def index(request): return render(request, "my_to_do_app/index.html") def createTodo(request): user_input_str = request.POST['todoContent'] return HttpResponse("create Todo를 할 거야! => " + user_input_str)
-
여기에서 확인해야 하는 코드는
user_input_str = request.POST['todoContent']
이다.index.html
에서 input 태그의 name 속성의 이름이todoContent
이다.
-
이제 결과를 확인해본다.