grape

Django로 RESTful API 서버 설계하기 (5) 본문

웹 프로그래밍/Django

Django로 RESTful API 서버 설계하기 (5)

grape-story 2021. 5. 24. 23:21

개발환경

window + Python 3.8 + PyCharm

 

 

목표

Django rest framework 튜토리얼 학습

간단한 주소록 구현 

 

 

1. 단건 조회, 수정, 삭제 기능 생성

 

전체 주소록 목록을 조회(GET) 하고 데이터를 생성(POST)하는 기능은 만들었지만 단건 조회, 수정, 삭제 기능은 구현 되지 않았다. 

  • 단건 조회 란?

"http://127.0.0.1:8000/addresses/1" <= 이런식으로 URL 뒤에 번호가 들어가는데 해당 번호의 X번 인덱스를 가지고 있는 데이터만 조회되는 기능을 단건 조회라고 한다. 즉, 게시글 마다 고유의 번호가 있고 해당 게시글만을 볼 수 있도록 조회 하는 기능 (ex - 디테일 페이지)

 

1-1. 단건 조회 

- views.py

addresses/views.py

 

- urls.py

restapi_django/urls.py

단건 조회 기능을 만들기 위해서는 객체의 고유값이 필요하다. Django 같은 경우 모델을 만들때 pk값을 따로 만들어 주지 않아도 자동으로 pk(id)값의 컬럼과 데이터가 DB에 생성되어 진다. 해당 기능을 만들기 위해 새로운 address(함수)를 만들고 이전에 만들었던 코드에서 살짝 변경한다. 받는 인자로는 request, pk 값 두개를 받고 해당 pk 값은 "obj = Addresses.objects.get(pk = pk) 로 전달 된다. 여기서 받는 pk값은 url을 통해 전달 되어 진다. 

즉, URL을 통해 "127.0.0.1:8000/addresses/1" 이라고 요청을 보내면 해당 인덱스값인 "1"이 'addresses/<int:pk>/' 에서 

<int:pk> 로 pk값이 매핑되어 들어가게 되고 해당 pk값이 views.py로 넘어 가게 되면서 address함수로 전달 되어지는 것이다. 

address 함수에서 pk값을 받으면 pk로 객체를 하나 불러온 다음 GET이면 전체 조회에서 하던 것처럼 데이터를 시리얼라이저에 넣으면서 해당 결과값을 조회 후 응답으로 돌려준다. (GET = 조회)

- Test

Insomnia

Insomnia를 이용해 테스트 해 보면 단건 조회가 정상적으로 성공한 것을 확인할 수 있다. 

 

 

1-2. 수정, 삭제

- views.py

addresses/views.py

수정(PUT), 삭제(DELETE) 또한 단건 조회와 같은 특징으로 하나의 객체를 선택해서 처리하는 로직이기 때문에 공통적으로 하나의 객체를 받아서 처리하는 address(함수) 에서 기능을 구현 한다. 수정(PUT) 같은 경우 로직은 생성(POST)와 비슷한데 차이점이라고 하면 Serializer에 넣을때 선택된 객체도 같이 넣은 후 save()를 한다는 점이다. 신규 생성이 아니라 수정이기 때문에 대상을 넣어야 하는 것 삭제(DELETE) 같은 경우는 .delete()하면 해당 객체가 지워진다.

 

- Test (PUT - 수정)

Insomnia

Insomnia를 이용해 요청을 PUT으로 변경한 뒤 body를 JSON으로 데이터를 변경한 후 요청을 보내면 성공적으로 데이터가 수정된 것을 확인할 수 있다. 

  • 1번 pk 값을 가지고 있는 객체 값이  "name=테스트, phone_number=010-1234-5678, address=서울" 에서 "name=수정한 이름, phone_number=010-5555-5555, address=인천" 으로 데이터가 변경 되었다. 

 

- Test (DELETE- 삭제)

Insomnia

Insomnia를 이용해 요청을 DELTE으로 변경한 뒤 URL 주소 에서 삭제를 원하는 객체의 PK값을 적어서 요청을 보내면 성공 시 204 응답 코드를 받는 걸로 return 값을 설정 했기 때문에 204 요청만 오고 다른 값은 없는 것을 확인할 수 있다.

 

Insomnia

GET 요청으로 전체 주소록 리스트를 조회하는 요청을 보내면 성공적으로 데이터의 수정과 데이터 1개의 값이 삭제된 리스트를 볼 수 있다. 

 

  • 객체를 삭제 했다고 해서 pk 값이 당겨지거나 하지 않는다. 고유 값이기 때문에 3번 객체를 삭제한 상태에서 새로운 객체를 생성하면 3번 이 아닌 4번이 pk값으로 할당 된다.

 

 

2. 로그인 기능 구현

 

ID와 PW가 올라왔을때 유효한 값이면 로그인 성공 틀리면 실패 하는 로그인 기능을 현재 가지고 있는 데이터의 name = ID, phone_number = PW 로 매칭해서 구현해 본다. 

 

- views.py

addresses/views.py

 

- urls.py

restapi_django/urls.py

로그인 기능은 단건 조회처럼 객체를 불러오는데 pk값이 아니라 입력된 아이디(name)값을 불러 온다. 이전의 단건 조회와 바뀐건 pk=pk 부분을 name=search_name 으로 바꿔준 거 뿐이다. DB에 있는 비밀번호(phone_number)와 입력된 비밀번호(phone_number)를 비교해서 맞으면 성공(200) 아니면 실패(400)을 응답 한다. 

  • 원래는 더 복잡한 에러 코드를 만든다든지 해야하지만 간단하게 구현 하였다. 

 

- Test (로그인 성공)

Insomnia

POST 요청으로 아이디(name) 와 비밀번호(phone_number)를 보냈을 시  로그인 성공이면 200값을 응답으로 돌려주는 것을 확인할 수 있다. 

 

- Test (로그인 실패)

Insomnia

POST 요청으로 아이디(name) 와 비밀번호(phone_number)를 보냈을 시  로그인 실패면 400 에러값을 응답으로 돌려주는 것을 확인할 수 있다. 

 

 

  • 해당 글은 유튜브 mychew__ 님의 채널의 동영상을 보고 학습 및 정리한 글 입니다. 

 

참고

https://www.youtube.com/watch?v=KRJRD2Kkf8w 

 

Comments