>

TIL

12주차 Day 1. Django DRF로 계정 기능, 상품 기능 구현하기

ekdud 2024. 9. 9. 23:55

트러블 슈팅

 

- auth_user 테이블이 없다고 에러가 발생했다.

OperationalError at /api/accounts/username
no such table: auth_user

 

from django.contrib.auth import get_user_model

User = get_user_model() 을 추가해야 해결되는 문제였는데 get_user_model()이 뭘까?

 

▹장고에 내장되어있는 User 모델을 사용하는 경우에는 django.contrib.auth.get_user_model() 함수를 호출하여 django.contrib.auth.models.User 클래스를 반환하고,

사용자 정의 User 모델을 구현하여 쓰는 경우에는, settings.py 파일에 AUTH_USER_MODEL 설정을 하는데 이렇게 하면 get_user_model()함수가 자동으로 사용자 정의 모델을 반환한다. (현재 활성화된 User 모델을 반환하며, 그렇지 않은 경우 User(default) 모델을 반환한다.)

 

 

 

 

- 사실 트러블 슈팅이라고 하긴 그런데 내가 보려고 적어놓는 것...

accounts 브랜치와 products 브랜치를 main 브랜치에 병합 후 실행하니 오류가 발생하였는데

Request Method:	POST
Request URL:	http://127.0.0.1:8000/api/products/
Django Version:	4.2
Exception Type:	OperationalError
Exception Value:	
no such table: main.auth_user
Exception Location:	C:\spartamarket_DRF\venv\lib\site-packages\django\db\backends\sqlite3\base.py, line 328, in execute
Raised during:	products.views.ProductList

 

auth_user 테이블이 없다는 것이다.. 아무리 봐도 잘못된 부분이 없어서(당연히 없지..) 구글링을 하다가 데이터베이스 파일이 손상되었거나 누락된 경우 db를 초기화하고 다시 migrate하라는 글을 보게 되었다. 그래서 깨달음을 얻고.. 맞다 마이그레이션..^^ 하면서 일단 초기화시키고 migrate했더니 잘 실행됐다. 이제 db관련해서 오류 생기면 마이그레이션을 했는지부터 생각해보자 제발🥺

rm db.sqlite3  # 기존 데이터베이스 파일 삭제
python manage.py migrate  # 새로운 데이터베이스 파일 생성 및 마이그레이션 실행

 

 

 

 

- postman에서 기능 테스트를 하는 도중에 상품 등록을 해야하는데 이때 입력받아야 하는 값 중에 상품 이미지를 어떻게 받아와야 하는지를 몰라서 처음에는 오류가 발생한 것을 보고 serializer랑 view코드만 계속 뜯어봤는데 그냥 입력을 잘 못 준 것이었다. 다음과 같이 값을 넣어야 했다. (맨날 raw-Json형식으로만 써서 몰랐다..ㅎ)

Body 탭에서 form-data를 선택하고, 이미지 파일을 업로드할 때 Key를 image로 설정하고 Type을 File로 선택한 뒤 이미지 파일을 업로드. 나머지 입력값들은 형식에 맞게 Text 타입으로 선택하고 입력.

 

오류가 어디에서 발생한 것인지 찾다가 FormParser와 MultiPartParser에 대해 알게되었다. 써주지 않아도 정상적으로 작동했지만 JSON으로 이미지 파일을 전송하는 것은 이미지 파일을 텍스트 형식으로 변환하여 JSON에 포함하는 방식으로, 비효율적이라서 parser_classes를 설정해 주는 것이 좋다고 한다. ex. parser_classes = [MultiPartParser, FormParser]

 

 FormParser

 HTMl form content를 파싱한다. request.data는 데이터의 QueryDict로 채워진다.
 일반적으로 HTML form data를 완벽하게 지원하기 위해 FormParser와 MultiPartParser를 함께 사용한다.
 .media_type: application/x-www-form-urlencoded

 

 MultiPartParser

 파일 업로드를 지원하는 Multi form content를 파싱한다. 두 request.data 모두 QueryDict로 채워진다.
 일반적으로 HTML form data를 완벽하게 지원하기 위해 FormParser와 MultiPartParser를 함께 사용한다.
 .media_type: multipart/form-data

 

 


 

기능 점검

회원가입

 

같은 username 또는 email로 가입하려 할 시, 400 Bad Request.

 

로그인

 

Refresh Token

 

유저 프로필

 

로그아웃

 

로그인되지 않으면 프로필 조회 불가

 

 

회원탈퇴. 비밀번호 입력 필요.

 

 


 

 

 

상품 등록

 

상품목록 조회 - 페이지네이션

 

상품 수정

 

상품 삭제