Django - Django REST FRAMEWORK #part1

반응형

django REST Framework ( DRF )는 RESTful한 API를 쉽게 만들 수 있도록 해줍니다. 

 

우선 Rest Framework 를 설치해야 합니다. 

 

저는 poetry 환경에서 django 개발을 하고 있어서

poetry add djangorestframework 

위 명령어로 Django REST FRAMEWORK 를 설치할 수 있습니다.

 

설치가 완료 되었다면 config/settings.py 파일로 가서 아래와 같이 적어줍니다. 

 

 

config/ settings.py 확인.


REST API 란 무엇일까요?

  • Example → 영화 API를 만든다고 가정합니다.
  • 해당 API는 기본적인 CRUD를 위해 활용됩니다.
    • Create
    • Read
    • Update
    • Delete
  • 유저가 영화를 업로드하고 보고 삭제하고 등
  1. API가 필요한 모든 URL을 만들고 싶음.
  2. URL에서는 동사를 사용하지 않음 ( add, edit, delete ) → 명사 활용

‘컬렉션’ → ‘Movies’ 같은 것. 복수를 활용

‘Inception’ → DB에서 고유 식별자가 될 것 입니다.

결과적으로 두 개의 URL이 나옵니다. ( /movies , /movies/inception )

우리는 HTTP methods 를 활용하여 인터렉션합니다. ( GET , POST ,PUT, DELETE)

  • GET → 데이터를 읽습니다.
  • POST → 데이터를 생성합니다.
  • PUT → 데이터를 업데이트
  • DELETE → 데이터를 삭제

명사 + HTPP moethods → GET/movies (모든 영화 리스트 불러오기) , POST/movies(영화생성)

참고로 /movies + DELETE , UPDATE 요청은 하지 않습니다. 왜냐하면 전체 영화를 모두 삭제하거나 수정하지 않기 떄문에.

Django REST FRAMEWORK 를 활용하기 전에 그냥 API 를 먼저 만들어보고 REST FRAMEWORK 를 사용합니다. 그래야 REST FRAMEWORK 의 편리함을 깨달음.!!

여기서 그냥 API를 만드는 과정을 보여드리면 너무 복잡해서 패스하도록 하겠습니다. 

 

Django REST FRAMEWORK Summary

 

HTML을 렌더링 하는 방법이 있습니다.

이는 사용자에게 데이터를 보여주기 위해 UI를 보여주는 것이죠.

하지만 우리는 이 용도로 Django를 사용하고 싶지 않다는 것을 깨달았습니다.

다이나믹한 웹사이트를 만들기 위해서는 React를 사용하는 것이 더 좋은 방법이니까요.

 

그래서 우리는 Django를 json 데이터를 위한 서버로만 사용할 것입니다.

이번 섹션에서는 사용자에게 json 데이터를 주는 것으로 시작했습니다.

우리는 json 형식으로 category 정보를 사용자에게 주려고 했습니다.

원래 json 을 Django에게 주기 위해서는 Serializer를 사용해야 하는데 이것만으로는 멋지게 만들 수 없다는 것을 알게 되었습니다.

‘Serializer’는 번역기입니다. Django 모델을 사용자, 핸드폰, 브라우저 등 모두에게 데이터를 줄 수 있는 json 모델로 번역해주죠.

 

Django REST Framework에서는 serializer를 만들 수 있도록 해줍니다.

이 말은 우리가 어떤 모델이든 번역할 수 있고 커스텀할 수 있다는 의미이죠.

serializer에게 서버의 어떤 데이터를 번역해서 보여지게 할지 설명해줄 수도 있습니다.

그리고 데이터가 가진 제약을 알려줄 수도 있죠.

( 예를 들어 require = True , max_length=100 와 같은 것들.)

 

이게 Django 데이터베이스 모델로부터 json 데이터로의 변환입니다.

Category.objects.all() 로 category 데이터를 찾아서 serializer 한테 넘기기만 하면 된다는 걸 배웠습니다.

데이터가 여러개라면 many = True

만약 요청이 “POST”라면 사용자는 그 요청을 데이터와 함께 보낼겁니다.

→ 사용자가 무언가를 생성할 수 있다는 것.

→ 하지만 사용자를 신뢰할 수 없기 때문에 유효성 검사를 해줘야함 ( is_valid() )

→ serializers.is_valid() 유효성 검사 후

→ serializer.save() 가 실행되는데 이는 serializer의 create 메소드를 부를 것입니다. ( serializer가 오직 사용자 데이터로만 생성되었을 때만 가능함 )

  • ex. serializer = CategorySerializer(data=request.data)
  • 사용자 데이터로 serializer를 만들고 save 메서드를 호출하면 create 메서드를 호출

→ serializer.save()는 검증된 사용자 데이터와 함께 create 메소드를 부릅니다.

→ 여기가 category object manager로 실제 데이터 베이스를 다루는 곳입니다.

→ 우리가 사용자의 데이터로 category를 생성한거죠.

반응형