https://vicapor.tistory.com/107

 

Django Ninja Tutorial 2

https://vicapor.tistory.com/7 Django Ninja Tutorial 1 Django Ninja 공식 페이지 : https://django-ninja.rest-framework.com/ 장고 닌자는 FAST API에서 영감을 받아서 만들어진 Web FrameWork이다. 빠른속도..

vicapor.tistory.com

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

+ Recent posts