교재홍보
- 다음의 교재를 바탕으로 실습이 이루어질 예정이다.
교재 구매 : https://www.yes24.com/Product/Goods/83568594
이번 글이 처음이라면, 먼저 이전 블로그를 읽어보기를 바란다.
- 첫번째 글 : https://ls-alt.tistory.com/7
- 두번째 글 : https://ls-alt.tistory.com/9
이번글에서는 Model(DB)에 대해 다뤄볼 것이다.
1. Test > my_test_app > models.py경로에 다음과 같이 코드를 작성해준다.
2. 모델의 변경사항을 DB에 적용하기 위해 다음의 코드를 실행한다.
$ python manage.py makemigrations
# migration 생성
$ python manage.py migrate
# migration 적용
3. 아래 코드를 통해 실제 Django 프로젝트 DB에 접근해보고 테이블을 확인해본다.
$ python manage.py dbshell
# DB에 접근
$ sqlite> .tables
# table이 만들어졌는지 확인
$ sqlite> PRAGMA table_info(my_test_app_todo);
# table 정보를 확인
$ sqlite> select * from my_test_app_todo;
# table내의 데이터를 조회해본다. 지금은 데이터가 없기 때문에 조회되지 않는다.
4. 만약 $ python manage.py dbshell 코드 실행 시 다음과 같은 오류가 발생한다면
CommandError: You appear not to have the 'sqlite3' program installed or on your path.
윈도우 10 환경 기준으로 https://www.sqlite.org/download.html에 접속하여
sqlite-tools-win32-x86으로 시작하는 파일을 다운로드하여
압축을 풀면 나오는 세가지 파일을 다음과 같이 manage.py와 같은 경로에 배치해주면 해결된다.
아래부터는 웹(View)에서 이루어지는 요청이 DB(Model)에 기록되도록 할 것이다.
5. 이를 위해 my_test_app > index.html을 열어보자.
44번째 줄의 form태그를 확인하면 Django에서 POST방식을 사용 하기 위해서 {% csrf_token %}를 적어준다.
6. 서버에 데이터 전달을 하기 위해 다음의 코드를 작성한다.
이로 인해 웹상에서 메모하기를 누르면 createTodo라는 정해진 URL로 전달된다.
<form action = 'createTodo' method='POST'>
# action은 어떤 URL로 데이터를 전달할 것인지를 나타낸다.
7. 웹에서 이루어진 사용자 요청을 Controller(views.py)로 전달하기 위해 my_test_app > urls.py 에서 코드를 수정해준다.
urlpatterns = [
path('', views.index),
path('createTodo/', views.createTodo) # 새로 추가
]
8. my_test_app의 urls.py에서 설정한 createTodo함수를 views.py에서 만들어준다.
def createTodo(request):
user_input_str = request.POST['todoContent']
# input태그의 id인 todoContent를 이용해 사용자가 입력한 데이터를 user_input_str에 할당한다.
return HttpResponse("create Todo를 할 거야! => " + user_input_str)
# 웹상에 user_input_str을 반환해준다.
9. 이제 웹페이지에서 메모하기 버튼을 누르면 다음과 같은 결과가 나온다.
'Django' 카테고리의 다른 글
Django - 엑셀계산 사이트 만들기(1) (0) | 2023.07.31 |
---|---|
Django를 통한 웹개발(5) (0) | 2023.07.27 |
Django를 통한 웹개발(4) (0) | 2023.07.27 |
Django를 통한 웹개발(2) (0) | 2023.07.27 |
Django를 통한 웹개발(1) (0) | 2023.07.26 |