-
flutter + django rest framework(1) Createdjango_study 2023. 8. 13. 03:17
안녕하세요~ 이전 포스팅에서 django app까지 만들어 보았습니다. 우리는 이제 django rest framework와 flutter를 이용해서 간단한 Todo List 앱을 만들어 볼 것입니다.
그러기 위해서는 먼저 rest framework를 설치해줘야겠지요! django rest framework는 django라는 프레임 워크에서도 또 하나의 틀을 추가로 하여 여러 가지 기능을 편하게 사용할 수 있도록 해주는 프레임워크입니다.
pip install djangorestframework
위 명령어로 설치를 할 수 있습니다.
설치 한 뒤에는 반드시 settings.py에 INSTALLED_APPS부분에 rest_framework문장을 넣어 줘야 합니다.
좋습니다! 이제 django resf framework 앞으로는 줄여서 DRF라고 부르도록 하지요.
DRF의 설치도 완료되었으니 이제 app을 만져 주도록 합시다.
제일 먼저 urls.py 파일을 만들어 줍시다. url 파일은 수동으로 직접 만들어 주셔야 합니다.
posting app urls.py 만들어 주셨다면 프로젝트 urls.py에서 posting app으로 넘어가기 위해서 urls.py를 수정해 주어야겠지요?
프로젝트의 urls.py에 path('appname/', include('appname.urls')) 구문을 추가해 주도록 합시다.
이를 통해서 주소/posting이라는 주소를 받았을 때 posting app으로 연결해 줄 것입니다.
좋습니다! 이제 본격적으로 어플을 만들어 가보도록 합시다!
먼저 데이터베이스에 적용해줄 테이블을 만들어 주도록 합시다. django는 models.py 파일에 model을 적용해 주는 것으로 데이터베이스에 테이블을 만들어 줄 수 있습니다.
우리는 todolist에 넣을 하나의 작업! Task를 만들어 주도록 합시다.
models.py models에는 여러 가지 Field가 있습니다. 데이터베이스에 적용시킬 Field이기 때문에 그 속성과 종류를 잘 알아두고 적절하게 사용해 주는 게 좋습니다. django 프로젝트를 하는 데 있어서 model을 만드는 작업은 정말 중요하고 프로젝트 규모가 커지면 커질수록 model 간의 관계나 데이터의 형태가 꼬이지 않도록 처음에 많은 생각을 하고 설계를 해주는 것이 중요합니다.
우리의 이번 프로젝트는 가볍게 Task의 id AutoField(자동으로 수가 올라가는 필드) primary_key=True(주 키를 의미하며 해당 데이터 테이블에 있어서 중복을 허용하지 않음), Task의 내용인 work CharField(문자 데이터 필드) default='null' (default 속성은 기본값을 줄 수 있음), Task가 완료되어 있는지를 보기 위한 isComplete BooleanField(true, false의 두 데이터 필드) 변수를 선언해 주었습니다.
models.py에 변화를 주었을 시에는 반드시 migrate를 해주어야 합니다. 먼저 migrations를 만든 뒤 migrate 해줍시다!
python manage.py makemigrations
python manage.py migrate
위 두 개의 명령어로 models.py를 데이터베이스에 적용시킬 수 있습니다.
어디 한번 관리자 화면을 통해서 확인해보도록 할까요?
하지만! 그전에 하나 더 해주셔야지만 관리자 화면에서 확인이 가능합니다.
posting app의 admin.py에 admin.site.register(Task)라는 문장을 넣어주시면 관리자 화면에서 Task모델을 확인 가능합니다!
posting/admin.py 그 후에 이제 서버를 실행시켜 봅시다!
python manage.py runserver
짜잔! 여러분 박수!! 짝짝짝 서버에 성공적으로 model이 등록되었습니다!
좋습니다. 주고받을 데이터의 형식을 만들었으니 이제 주고받아 봅시다!
posting 앱에 있는 views.py를 작성해 주면 데이터를 주고받을 수 있습니다. 그전에 사전작업이 한 가지 있네요. serializer를 사용하는 것입니다. serializer란 데이터를 직렬화해줍니다. 말이 어렵지요? 쉽게 말해 구조를 가지고 있는 데이터를 하나의 문장으로 바꾸어주는 것입니다. 쿼리 셋을 데이터로 바꾸어 주기도 하지요. 말로 해서는 어려우니 serialize 된 데이터를 print 해서 알아보도록 합시다!
먼저 posting app 내부에 serializer.py를 만들어 줍시다.
serializer.py 파일에는 아래와 같은 코드를 적어 줍시다.
serializer.py 간단합니다. 사용할 serializer의 model은 Task, 직렬화해줄 fields들은 id, work, isComplete이다.
됐습니다! 이제 드디어 views.py를 만져 줄 수 있겠군요. 이번 포스팅에서는 Create를 하고자 하니 addTask 함수를 만들어 주도록 합시다.
views.py addTask함수 여러 가지 어려워 보이는 게 많지만! 생각보다 쉽습니다. 먼저 @api_view는 decorator의 역할을 합니다. GET으로 받을 시와 POST 형식으로 받을 시에 따라 어떻게 작동할지를 나눠줍니다.
우리가 기존에 flutter로 만들어 두었던 todolist 어플에서 work와 isComplete를 받아 오지요? 그 값을 request를 통해서 받아 옵니다.
해당 값을 request.data를 통해서 만들어 두었던 TaskSerializer에 넣어서 serializer를 만들어 줍시다. is_valid() 유효성 검사입니다. 현재로서는 어렵게 생각하지 마시고 맞는 값이 들어왔는가? 있어야 하는 값이 있는가? 를 따져보는 함수 정도로 생각해 주시면 됩니다.
그걸 통과한다면 serializer.save()를 통해서 데이터베이스에 값이 저장되고 사용자에게 Response 응답을 보내는 것입니다. 물론 실패한다면 error 내용을 보내도록 하고요!
흠... 뭔가 까먹은 것 같은데... 맞아요! urls로 마무리를 하도록 하지요. 기본 주소에 /posting을 붙임으로써 posting app으로는 보냈는데... addTask 함수를 작동하게 하려면 어떻게 해야 할까요? 바로 posting 내부에 있는 urls에 추가를 해주도록 합시다!.
posting/urls.py 하나의 path를 추가해 줍시다! 이제 주소/posting/addTask라는 주소로 접속을 할 경우 views.addTask로 연결되겠지요?
좋습니다. 이제 django에서 해줄 건 끝났습니다.
'django_study' 카테고리의 다른 글
flutter + django rest framework(4) Update (0) 2023.08.13 flutter + django rest framework(3) Read (0) 2023.08.13 flutter + django rest framework(2) Create (0) 2023.08.13 django project, app, super user 생성하기! (0) 2023.08.03 django 시작하기 (0) 2023.08.03