세로형
Link
10-25 02:32
«   2021/10   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
Archives
Today
140
Total
1,885,258
관리 메뉴

꿈 많은 사람의 이야기

python django REST API 개발 - 3편. django rest api update, delete 본문

python-django

python django REST API 개발 - 3편. django rest api update, delete

오키여 이수진의 블로그 2019. 7. 31. 06:47

안녕하세요.

파이썬 장고를 활용한 게시판 웹 개발 14편입니다.

지난 포스팅까지 진행하면서 django rest api의 read 부분을 공부해봤습니다.

rest api에는 CRUD가 있는데요. 현재 여기서 Read 부분만 한 것이죠?

그럼 django rest api에서 Update, Delete는 어떻게 할까요?

이번 포스팅은 update와 delete에 대해서 알아봅니다.

 

 

먼저 django rest api를 위해 만들었던 프로젝트에 들어갑니다.

여기에 보시면 UpdateAPIView와 DestroyAPIView를 상속했죠?

마찬가지로 rest_framework.generics 아래에 있습니다.

 

 

그리고 delete와 update에 해당되는 url도 추가해주셔야합니다.

detail때와 마찬가지로 (?P<no>\d+)를 통해 Primary key를 이용하여서 update와 delete가 가능하도록 합니다.

 

 

자! 그럼 실제로 url로 들어갑니다.

localhost:8088/todo_list/7/update 이렇게 들어가니까 위처럼 나오게 되죠?

PUT 버튼이 있습니다. 참고로 REST API에서 update는 PUT입니다.

Create는 PUSH이구요!

 

현재 실제 값은 위 사진과 같이 되어 있습니다.

업데이트를 시켜보죠

 

 

수정하는 글을 작성합니다.

 

 

그리고 실제로 수정이 된 것을 확인할 수 있습니다!

rest api의 update는 이렇게 만들 수 있습니다.

 

 

이제 삭제를 봐보죠

localhost:8088/todo_list/8/delete로 들어갑니다.

마찬가지로 DELETE 버튼이 있는데요

 

 

삭제를 누르게 되면 한번 더 확인을 합니다.

delete 버튼을 눌러줍니다.

 

 

실제 삭제가 된 것을 볼 수 있습니다.

이것을 파이썬 프로그램이나 Django에서 사용하려면 python requests를 이용하면 됩니다.

 

 

requests.put('http://localhost:8088/todo_list/7/update/', data = d)

이런식으로요!

d는 dictionary 데이터를 넣어주면 됩니다.

 

 

실제로 값이 바뀌는 것을 볼 수 있습니다.

django에 위와 같이 requests를 이용하면 기존에 db와 연동하는 것이 아닌, rest api와 연동하여 프로그램을 작성할 수 있습니다.

 

반응형
그리드형
2 Comments
  • 프로필사진 리로이신 2020.11.04 18:01 views.py에서 update랑 delete 클래스 만들고 lookup_field = 'no' 넣어야하지 않나요?
    AssertionError: Expected view restful_delete to be called with a URL keyword argument named "pk". Fix your URL con
    f, or set the `.lookup_field` attribute on the view correctly.
    라는 에러가 나오는데 둘다 lookup_filed = 'no' 넣어주니 해결됐네요.
  • 프로필사진 오키여 이수진의 블로그 2020.11.05 21:46 신고 안녕하세요.
    음.. 저는 해당 에러를 처음봐서 말씀하신 부분을 잘 모르겠어요 ㅠㅠ 죄송합니다.

    아마 이 글이 예전 글이라, DJango 버전 차이 등이 나서 그럴 수도 있다는 생각도 들고요..

    그래도 해결 되셨다니 다행입니다 ㅠㅠ
댓글쓰기 폼