본문 바로가기
django/django REST Framework

2021.05.04 django restframework tutorial

by 해맑은 코린이 2021. 5. 4.

2021.05.02 django restframework tutorial_정리노트

 

 

벌써 5월이다.. 이론만 하다 이렇게 한세월 보낼 수 없다고 생각한 나는 다시 끄적끄적..혼자 프로젝트를 해보려 한다..! 

처음이라 많이 서툴테지만 이제는 지체할 수 없다!!!!! ㅋㅋㅋㅋㅋㅋㅋㅋ

그래서 나는  REST API 를 사용해서 장고와 리액트를 같이 써보려함!! 오랜만에 장고 포스팅...

 

일단 오늘은 차근차근 개념정리부터 ㄲ

 

 

DRF (Django Rest Framework)

RESTful API 서버를 쉽게 구축할 수 있도록 도와주는 오픈소스 라이브러리.

 

 

 

그렇다면 여기서 RESTful API 가 무어냐.

 

하나하나 뜯어서 살펴볼까나

 

API ( Application Programming Interface )

어플리케이션 프로그래밍 인터페이스의 준말.

응용프로그램에서 사용할 수 있게, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.

즉, API 란 데이터를 요청하고, 전달하는 과정에서 하나의 매개체라고 생각하면 될 것 같다.

 

 

 

REST(Representational State Transfer)

소프트웨어 아키텍쳐의 한 형식

RESTful API 에서 말하는 규칙을 따라서 개발한다면, 훨씬 우리는 일을 쉽고 간단하게 진행할 수 있다.

 

 

 

개념들이 제대로 들어가면 또 오래걸릴 것 같아서 지금은 내가 이해한 뜻만 간단히 정리!

 

 


 

 

그래서 우리는 RESTful API 를 장고에서 쉽게 구축하기 위해서 DRF 의  Serializer 라는 기능을 이용할 것이다.

여기서 또, Serializer란...!

 

Serializer

파이썬 형식의 코드를 다른 네트워크 환경과 통신을 하기 위해서는 데이터 구조나 오브젝트를 동일한 포맷으로 혹은 다른 컴퓨터 환경에 저장한 후 재구성할 수 있는 포맷으로 변환하는 과정이 필요한데, 이 때 복잡한 데이터를 JSON,XML 등의 컨텐트 타입으로 쉽게 변환 가능한 파이썬 데이터타입으로 변환 시켜주는 것이다.

 

 

또또 한마디로!!

 

장고의 DB 안의 사용자 모델 인스턴스를 JSON 형태로 변환하는 기능이라 보면 되겠다!!

우리는 지금까지 파이썬 기반으로 데이터 쿼리셋을 template 로 넘겨서 html 로 렌더링 했는데, 우리는 JSON 형태로 데이터를 보낼 거기 때문에 우리는 serializer 를 사용한 것이다.

 

 

 

그러니까 나는 파이썬 기반 장고와 리액트를 같이 쓰기 위해서 해당 기능을 써볼 것이다!

 

 

 

그러면 진짜 설치하고 오늘은 drf 를 기본적으로 세팅을 ㄱ ㄱ

 

 

가상환경을 켜주고 장고까지 설치해주고, 프로젝트 생성, 앱생성까지 한 뒤부터니

기억이 안난다면,

 

korinkorin.tistory.com/3?category=938113

 

2020.08.20 django_CRUD_1

장고 첫 노트! 그래서 장고에서 프로젝트를 시작하는 방법부터 기본 CRUD를 찬찬히..해보자..아마.. 우당탕탕 예상.. 내가 사용하는 것은 vs code기 때문에 여기서 터미널을 열어주고 이렇게 python -m

korinkorin.tistory.com

 

여기에서 참고해서 python manage.py startapp 만들 앱 이름

까지 했음.

 

 

 

 

djangorestframework 또한 설치해줍씨당 . 장고에선 당연히 설치해주면 ? 

 

settings.py 로 가서 내가 설치한 앱들을 적어주는 단계가 있었다. ㄱ ㄱ

 

 

내가 만든 앱 이름과 rest_framework 도 같이 적어주었음.

 

 

models.py

 

그러고 간단하게 내가 쓸 모델을 생성하고,

 

model 생성하고는 ?!?!

 

 

python manage.py makemigrations

python manage.py migrate

 

이 두 명령어를 통해 마이그레이션과 데이터 베이스에 적용을 해준다.

 

장고를 너무 오랜만에 해서 모델 필드나 이런것도 하나하나 덜덜 떨면서 작성하고 이까지 내 게시물 검색도 오지게한듯..ㅎ 역시 블로그는 내가 보려고 쓰길 잘했다 뿌듯 ㅎㅁㅎ

 

쨋든 이제 적용해주었으니, 

 

admin.py

 

여기에 내 모델을 등록해주고 어드민에다가만 등록하지말고 python manage.py createsuperuser 로 내 어드민 계정도 생성해주자.

 

 

이제 내가 만든 앱의 경로에 serializers.py 를 생성 본격적으로 장고에 있는 serializer 를 써볼까!

 

프로젝트/앱/serializers.py

 

 

여기서는 ModelSerializer 를 사용했는데, 여기에는 Serializer, HyperlinkedModelSerializer 등등 다양한 것들을 쓸 수 있는데 하이퍼 링크는 좋은 RESTful 디자인이라고 공식문서에 나와 있다.

 

하지만 내가 쓰지 않은 이유는, 우리는 post 에서 pk 를 써서 detail,update,delete 를 구현하는데, HyperlinkedModelSerializer 는 pk 필드가 기본 요소가 아니기 때문에 혹시나하고 나는 ModelSerializer 를 씀! 참고하시오

 

또한 포린키로 연결되어 있는 user필드는 따로 read_only 옵션을 주어야 해서 주고, 최종적으로 fields 에 반영했다.

 

또한 이렇게 적어보니까 장고의 modelform 과 매우 유사하다는 걸 알 수 있음. 쨋든 이제 serializer 는 이게 다다!

 

이제 view로 가자!

 

 

프로젝트/앱/views.py

 

 

여기서는 개별뷰를 작성하지 않고, 일반적인 동작을 그룹화 하는 Viewset 을 사용했다. 필요시에는 개별뷰로 쪼갤 수 있지만, 우리는 간단히 viewset 을 사용해서, 로직을 따로 구현하지 않고도 여러 동작을 하는 view 를 생성할 수 있다. 

그래서 우리는 단 하나의 view 로 CRUD 모두를 구현할 수 있는 것!! ㅎㅁㅎ 최고..

 

 

 

 

view 를 연결해줬다면 ?!? url 로 ㄲ!

 

url 은 프로젝트 단위에서 먼저 앱의 url 을 상속 먼저 해줍씨다

 

프로젝트/urls.py

 

 

우리는 앱단위에서 생성해준 url 을 다시 해줄 것임! 그러니까 이제 앱에다가 urls.py 를 생성해주고 ㄱ ㄱ

 

 

프로젝트/앱/urls.py 

 

여기서 좀 많이 헤맸는데, 아무래도 user 는 공식문서를 참고하고, crud 는 여러 블로그 글을 참고했는데, 여러 처음 보는 개념들이 섞여서 결국 정리하는데 많은 오류들을 거쳤다...ㅎㅁㅎ...

 

먼저 우리는 viewset을 사용했기 때문에, 장고에 있는 router 를 사용하여, 자동으로 url 을 생성할 수 있다. 그래서 앱이름/users 경로로 들어가면 해당 UserViewSet 에 대한 내용이 나온다. 나중에 실행화면으로 또 보여드리게쌈.

쨋든 라우터는 디폴트 라우터를 설정하고, 우리가 만든 viewset 에 이름을 붙여주면 자동으로 url 이 생성되니 그 밑을 보자!

 

 

그 다음 CRUD 를 담당하는 PostViewSet은 각각 create,read / update,delete 로 나누었는데, 나누어준 이유는 update와 delete 는 pk 가 필요하기 때문에, 따로 url 을 나누어서 매핑한 것이다! 그렇기 때문에 각각으로 나눈 매서드 들을 가져와서 적어주었다...! 

 


 

이제 진짜 실행 ㄱ ㄱ!

 

 

프로젝트/앱/posts

 

먼저 로그인 하기 전 화면 . 이게 뜨면 django admin 처럼 drf 에서 만들어놓은 페이지로 들어가게 된다.

위에  createsuper 로 만들어준 계정으로 로그인하자.

 

 

로그인한 앱/프로젝트/posts

 

 

해당 경로로 들어가면 이렇게 내가 작성한 post 들이 뜬다. read 성공!

 

밑에 보면 내가 만든 필드대로 게시물을 입력하는 창도 있으니 create 성공! 

 

 

프로젝트/앱/posts/id ( pk 값 )

 

이러면 해당 id 값을 가진 post 가 뜨면서, 

 

 

 

해당 내용을 바꿔주면 그대로 반영이 된다. update 성공!

 

 

 

마지막으로 해당 post 를 delete 하게 되면!!!

 

 

해당 post 가 잘 delete 되니까 delete 도 성공!

 

 

프로젝트/앱/users

 

 

해당 경로로 가면 또, 내가 만든 user 에 따라 user 도 잘 뜨게 된다. 

 

 

마지막으로!!!! 찐막으로!!

 

이렇게 해주면, drf 에서 페이징도 할 수 있다!! 참고!

 


 

원래는 리액트까지 연동해보려 했건만.. 이것만 하는대도 나름 오래걸렸군.. 빠른 시일내에 리액트와도 연동해보는 게 목표! 그러면 오랜만의 장고 포스팅을 마쳐보도록 하겠다! 빠이!

댓글