-
[Django] 뉴스 API 서버 구현 중, 트러블 슈팅Django 2024. 9. 14. 03:04
트러블 슈팅
01. 비밀번호 변경 기능 구현 후 Postman에서 테스트를 하는데 에러가 났다. 왜 안되지..
dict를 불러올 수 없다구??🤔
views.py 코드를 보면
뭐가 문제일까..
old_password와 new_password를 튜플로 묶어줘서 그런건가..
리스트로 묶어주면?
해결된다!
근데.. 비밀번호를 1로 바꿔도 변경이 된다..🫠
구글에 파이썬 비밀번호 검증 정규표현식으로 검색했더니 여러가지가 정보가 쏟아졌다.
그 중 하나를 참고해 validators.py 에 로직을 추가해줬다.
def changepasswordValidation(pwd): if len(pwd) < 8: # 비밀번호는 최소 8자 이상이어야 함 return False elif re.search('[0-9]+', pwd) is None: # 비밀번호는 최소 1개 이상의 숫자가 포함되어야 함 return False elif re.search('[a-zA-Z]+', pwd) is None: # 비밀번호는 최소 1개 이상의 영문 대소문자가 포함되어야 함 return False elif re.search('[`~!@#$%^&*(),<.>/?]+', pwd) is None: # 비밀번호는 최소 1개 이상의 특수문자가 포함되어야 함 return False else: return True
그럼 뷰 코드에도 적용해줘야한다.
# 비밀번호 변경 class ChangePasswordView(APIView): permission_classes = [IsAuthenticated] def post(self, request): user = request.user serializer = ChangePasswordSerializer(user, data=request.data) if serializer.is_valid(): old_password = serializer.validated_data["old_password"] new_password = serializer.validated_data["new_password"] if not changepasswordValidation(new_password): return Response({"message": "비밀번호 형식에 맞지 않습니다. 비밀번호는 최소 8자 이상이어야 하며 1개 이상의 숫자를 포함해야 하며 1개 이상의 특수문자를 포함해야 합니다😊"}, status=status.HTTP_400_BAD_REQUEST) # 현재 비밀번호 맞는지 확인 if not user.check_password(old_password): return Response({"message": "현재 비밀번호가 맞지 않습니다🥺"}, status=status.HTTP_400_BAD_REQUEST) # 비밀번호 변경 user.set_password(new_password) user.save() return Response({"message": "비밀번호 변경 완료👌"}, status=status.HTTP_200_OK)
다시 테스트 해보면 잘 된다.
▼ 아래와 같이 조건에 맞게 바꿔줘야 변경된다.
02. Debug mode
팀원 분들과 다 같이 테스트를 하는 도중 오류가 발생했다. 뭐 에러야 수도없이 발생하지만.. 왜 이렇게 뜨지🤔
근데 왜 맨날 보던 이런 노란색 오류 화면이 아니라 왜 저렇게 뜨지..
그러다 우린님이 settings.py 의 Debug 모드가 뭘로 되어있는게 물어보면서 문제가 해결되었다.
Debug를 True로 변경해서 해결할 수 있었다👍
Debug True 모드와 Debug False 모드
1. DEBUG=True 모드 (개발 환경)
DEBUG=True는 개발 중에 사용된다. 개발자에게 유용한 디버깅 정보를 제공하며, 에러가 발생하면 상세한 오류 페이지를 보여준다.
설정방법 → settings.py에서 DEBUG 값을 True로 설정한다.
DEBUG = True ALLOWED_HOSTS = [] # 개발 환경에서는 빈 리스트 또는 localhost를 사용
- 에러 발생 시 Django가 상세한 오류 페이지를 표시한다.
- 정적 파일(static files)을 자동으로 제공한다.
- 보안에 취약할 수 있으므로 절대로 배포 환경에서는 사용하지 않아야 한다.
2. DEBUG=False 모드 (배포 환경)
DEBUG=False는 프로덕션(배포) 환경에서 사용됩니다. 보안을 강화하고, 상세한 오류 메시지를 외부 사용자에게 노출하지 않아야 한다.
설정 방법
→ settings.py에서 DEBUG 값을 False로 설정한다, 반드시 ALLOWED_HOSTS 설정에 서버의 도메인이나 IP 주소를 추가해야한다.
DEBUG = False # 서버의 도메인 이름이나 IP 주소를 추가 ALLOWED_HOSTS = ['로컬호스트주소', '도메인주소', 'IP address']
- 오류 페이지: 에러 발생 시 Django는 내부 서버 오류(500)나 페이지를 찾을 수 없음(404) 등의 일반적인 에러 페이지를 표시한다.
- 정적 파일 처리: 정적 파일은 자동으로 제공되지 않으므로 collectstatic 명령어를 사용해 별도로 서버에 정적 파일을 제공해야 한다.
'Django' 카테고리의 다른 글
Django Channel (0) 2024.10.02 Django DRF 개인과제 트러블 슈팅 (0) 2024.09.10 [Django] API 문서화 (2) 2024.09.10 [Django] AWS 배포 → Gunicorn, Nginx 설치 및 설정 (2) 2024.09.08 Django, AWS 배포 (Deploy) (2) 2024.09.06