https://vicapor.tistory.com/107
Django Ninja Tutorial 2편에 이은 3편이다. 오늘은 API CRUD를 구현해보는 튜토리얼이다.
1. POST Method
@api.post("/tracks", response={201: TrackSchema})
def create_track(request, track: TrackSchema):
track = Track.objects.create(**track.dict())
return track
Json으로 이루어진 데이터가 정상적으로 통신되었을 때, 201를 응답해주고 Schema의 검증을 통해서 데이터 형식을 확인하고 데이터를 만들어준다.
2. PUT Method
@api.put("/tracks/{track_id}", response={200: TrackSchema, 404: NotFoundSchema})
def change_track(request, track_id: int, data: TrackSchema):
try:
track = Track.objects.get(pk=track_id)
for attribute, value in data.dict().items():
setattr(track, attribute, value)
track.save()
return 200, track
except Track.DoesNotExist as e:
return 404, {"message": "Track does not exist"}
수정은 먼저 track_id를 통해 수정할 데이터를 가져오고 수정할 데이터를 data에 TrackSchema를 통해 검증한다.
그리고 setattr을 통해 atrribute와 value를 딕셔너리 형태(Json)로 저장해놓는다.
201: 성공, 400: 문제
3. DELETE Method
@api.delete("/tracks/{track_id}", response={200: None, 404: NotFoundSchema})
def delete_track(request, track_id: int):
# curl -X DELETE http://localhost:8000/api/tracks/7729
try:
track = Track.objects.get(pk=track_id)
track.delete()
return 200
except Track.DoesNotExist as e:
return 404, {"message": "Could not find track"}
delete method는 검증할 데이터가 없기 때문에 track을 리턴하지 않는다.
response는 응답 온 데이터 즉 return 한 데이터를 의미한다. 검증할 리턴 값이 없기 때문에 None으로 설정해준다.
'Back-End > Django-ninja' 카테고리의 다른 글
Django Ninja Render (0) | 2021.11.30 |
---|---|
Django Ninja Tutorial 5 (0) | 2021.11.30 |
Django Ninja Tutorial 4 (0) | 2021.11.30 |
Django Ninja Tutorial 2 (0) | 2021.11.29 |
Django Ninja Tutorial 1 (0) | 2021.07.09 |