@user_router.get('/{user_id}', response={200: schema.UserSchema, 404: schema.ErrorSchema})
def user(request, user_id: int):
...
@user_router.put('/{user_nickname}', response={200: schema.UserProfileSchema, 404: schema.ErrorSchema})
def change_user(request, user_id: int, data: schema.UserProfileSchema):
...
여기 2개의 Method가 있다. 사용방법에는 전혀 이상이 없지만 밑에 put 메소드를 실행하면 Method Not Allowed 오류가 발생한다. header를 살펴보면 분명히 PUT Method로 보냈는데 GET Method가 실행된다. 첫번째 GET Method가 실행되는 것이다. (맨 위에 것으로 인식한다.)
왜 이런 문제가 발생할까? 문제는 Django Resolver의 문제이다. url pattern이 같으면 같게 인식하는 문제이다.
그렇다면 해결을 어떻게 해야할까?
방법이 있다.
@user_router.get('/{user_id}', response={200: schema.UserSchema, 404: schema.ErrorSchema})
def user(request, user_id: int):
@user_router.put('/{user_nickname}/update', response={200: schema.UserProfileSchema, 404: schema.ErrorSchema})
def change_user(request, user_id: int, data: schema.UserProfileSchema):
위와 같이 url pattern을 다르게 주는 것이다. 하지만 이 방법은 api 규칙에는 맞지 않다.
올바른 방법은
@user_router.get('/{user_id}', response={200: schema.UserSchema, 404: schema.ErrorSchema})
def user(request, user_id: int):
@user_router.put('/{user_id}', response={200: schema.UserProfileSchema, 404: schema.ErrorSchema})
def change_user(request, user_id: int, data: schema.UserProfileSchema):
애초에 파라미터 값을 같게 주는 것이다.
'Back-End > Django-ninja' 카테고리의 다른 글
Django Ninja Router (0) | 2021.12.07 |
---|---|
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 3 (0) | 2021.11.29 |