DRF 마켓서비스 구현 트러블슈팅

Ryu Honggyu·2024년 9월 9일

Django

목록 보기
19/19

작성한 서비스

[Github 링크]

목표

  • DRF 를 사용해 마켓 백엔드 기능 기초를 구현한다.
  • Accounts 와 Products 앱을 추가한다.
  • Accounts 앱에서는 Accounts CRUD 를 구현한다.
    • 회원가입
    • 로그인
    • 프로필 확인
  • Products 앱에서는 Products CRUD 를 구현한다.
    • 상품 등록
    • 상품 조회
    • 상품 수정
    • 상품 삭제
  • 프론트엔드는 구현하지 않으며 API 테스트는 POSTMAN 을 통해 진행한다.

POSTMAN

  • 이전 작업한 POSTMAN TIL 을 참고하여 사용한다. [링크]
  • 각 기능별로 Request 를 만든다. 상기한대로라면 총 7개의 Request 가 기본적으로 존재해야한다.

트러블슈팅

  • 대부분의 문제가 필드 누락, POSTMAN 등에서 발생함.

상품 등록시 user 데이터 자동 추가

  • 상품 등록 시 user 필드가 없다는 오류가 발생해, 현재 인증된 사용자를 user 필드에 자동으로 추가되게 만들기로 함.
class ProductListView(generics.ListCreateAPIView):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer
    permission_classes = [IsAuthenticatedOrReadOnly]

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)
  • ProductListView 에서 perform_create 는 작동 시 products 데이터를 저장하며, 이 때 user 필드에 Request 를 수행한 user 를 대입함.

슬래시 누락

You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set.

  • 이 메시지는 url 뒤에 / 가 누락되었을 때 발생함.
  • 이것이 누락되어도 리다이렉트가 가능한 경우도 있지만, 그럼에도 POST 데이터는 유지 불가.
  • http://127.0.0.1:8000/api/products 의 끝에 http://127.0.0.1:8000/api/products/ 를 추가하는 것만으로 간단하게 문제가 해결됨.
  • 에러 메시지 안에 힌트가 있다.
profile
알고리즘 & 웹 & CS & AI

0개의 댓글