본문 바로가기

TIL

[TIL 2024. 05. 03] 심화 팀프로젝트

심화 프로젝트인 뉴스 웹 페이지의 기본기능 중에 댓글 조회,생성,수정,삭제를 맡게 되었다.


댓글 생성

기본적으로 댓글과 관련해서는 Comments라는 model을 작성했고, 직렬화를 위해서 serializer도 작성했다.

 

하지만 아주 아주 많은 기능을 제공해주는 django의 serializer에만 의존해서 코드를 작성하는 것은 장기적으로 봤을 때 다른 언어를 배워서 사용하고, 그 언어들의 serializer를 쓰게 될 때에 도움이 되지 않을 것 같아서 "직렬화"만 serializer를 쓰고, 기본적인 로직은 모두 view로 차근차근 작성해보기로 했다.

 

처음 작성한 model, serializer, view는 다음과 같다.

 

models.py

 

serializers.py (ModelSerializer 사용)

 

views.py

 

comments 생성: 오류 메시지

 


 

이 문제 해결의 실마리는 user와 article정보가 request로 제공되지 않는 것에 있었다.

 

즉, model의 fields는 user,article,content,created,updated의 다섯가지인데, 실제로 사용자의 입력으로 req으로 전달되는 field는 content뿐이다.

 

하지만 이 중 created와 updated는 auto_now_add, auto_now속성을 지정해줬기 때문에 사용자가 입력을 직접 해주지 않아도 자동으로 값이 입력된다.

 

다시 말해, user와 article만 사용자의 입력값이 없는데, db에는 해당 fields에 대해 null이 True로 허용되어 있지 않고,  serializer는 ModelSerializer를 사용하고 있기 때문에 위와 같은 오류가 발생하는 것이다.

 

하지만 기본적으로 user와 article값은 null을 허용해줄 수 없으므로(댓글의 특성상..fk로 활용해야함), view에서 추가적으로 user와 article에 대한 정보를 줘야 serializer를 사용해서 API로 해당 데이터를 반환해줄 수 있다.

 

오류를 수정한 코드는 다음과 같다

 

오류를 수정한 코드

 


auth 개발 전에 postman으로 기능 확인하는 법

 

이번 팀 프로젝트에서는 auth기능과 article, comment기능을 각각 나누어 팀원들이 개발하기로 했다.

 

그러다 보니 내가 담당하는 comment기능이 잘 기능하는지 확인하기 위해 "로그인"기능을 전제로 하거나, user의 정보를 가져와서 사용해야 하는 경우가 있었다. 대표적인 경우가 바로 "request.user"였다.

 

튜터님께 여쭤본 결과, 이렇게 팀프로젝트에서 분업으로 기능을 개발할 시에 로그인된 상태를 사용하려면 user table(model)에 있는 user 중 임의의 user데이터를 pk로 가져와서 작성한 코드가 정상적으로 잘 실행되는지 확인하면 되는 것이었다!

 

user = get_object_or_404(Accounts, pk=1)

 

위의 예시로 보면 이와 같다.

 

즉, pk(user_id)가 1인 user의 데이터를 가져와서 postman에서 기능이 잘 실행되는지 확인할 수 있었다.