DRF란?
-
Django REST framework 는 django에서 Restful API 서버를 쉽게 구축할 수 있도록 도와주는 오픈소스 라이브러리
-
Web API 구축을 위한 강력한 toolkit을 제공
-
DRF의 serializer는 django의 Form 및 ModelForm 클래스와 매우 유사하게 작동
[실습 사전 준비]
$ pip install django==3.2.18 djangorestframework django-seed psycopg2
- 프로젝트 생성, articles 앱 생성, urls 등록
파일 경로 ==> settings.py

파일 경로 ==> myapi/urls.py

파일 경로 ==> articles/urls.py


- Articles 모델 작성 및 migration
파일 경로 ==> articles/models.py

$ python manage.py makemigrations
$ python manage.py migrate
- django-seed 이용해 임의 데이터 생성
$ python manage.py seed articles --number 20
[ModelSerializer]
- serializers.py 생성
- ModelSerializer 작성
파일 경로 ==> articles/serializers.py

ModelSerializer
- ModelSerializer 클래스는 모델 필드에 해당하는 필드가 있는 Serializer 클래스를 자동으로 만들 수 있는 shortcut을 제공
- Model 정보에 맞춰 자동으로 필드를 생성
- serializer에 대한 유효성 검사기를 자동으로 생성
- .create() 및 .update()의 간단한 기본 구현이 포함됨
- 단일 객체 인스턴스 대신 QuerySet 또는 객체 목록을 serialize하려면 many=True를 작성해야함(ex. serializer = ArticleListSerializer(articles,many=True) )
[Build RESTful API - Article]

GET - LIST
- 게시글 데이터 목록 조회하기
- DRF에서 api_view 데코레이터 작성은 필수
파일 경로 ==> articles/views.py

GET - DETAIL
- 단일 게시글 데이터 조회하기
- 각 데이터의 상세정보를 제공하는 ArticleSerializer 정의
파일 경로 ==> articles/serializers.py

파일 경로 ==> articles/urls.py

파일 경로 ==> articles/views.py

POST
- 게시글 데이터 생성하기
- 요청에 대한 데이터 생성이 성공했을 경우는 201 Created 상태 코드를 응답하고 실패 했을 경우는 400 Bad request를 응답
파일 경로 ==> articles/views.py


Raising an exception on invalid data
- 유효하지 않은 데이터에 대해 예외 발생시키기
- is_valid()는 유효성 검사 오류가 있는 경우 ValidationError 예외를 발생시키는 선택적 raise-exception 인자를 사용할 수 있음
- DRF에서 제공하는 기본 예외 처리기에 의해 자동으로 처리되며 기본적으로 HTTP 400 응답을 반환
파일 경로 ==> articles/views.py

DELETE
- 게시글 데이터 삭제하기
- 요청에 대한 데이터 삭제가 성공하였을 경우는 204 No Content 상태 코드 응답(명령을 수행했고 더 이상 제공할 정보가 없는 경우)
파일 경로 ==> articles/views.py

PUT
- 게시글 데이터 수정하기
- 요청에 대한 데이터 수정이 성공했을 경우는 200 OK 상태 코드 응답
파일 경로 ==> articles/views.py

정리 야무쳐요 ㅎ.ㅎ!!