Notice
Recent Posts
Recent Comments
코드 위의 하루 (A Day on the Code)
🧑🍳 Python 프로젝트 레시피: Part 6 본문
자주 썼던 코드 스니펫
실전에 바로 쓰는 코드 레시피 모음
✅ 1. 회원가입 API (Django + DRF)
# users/views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .serializers import UserSerializer
class SignupView(APIView):
def post(self, request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
user = serializer.save()
user.set_password(user.password) # 비밀번호 해시화
user.save()
return Response({"message": "회원가입 완료"}, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
✅ 비밀번호는 반드시 set_password()로 해시화 후 저장해야 로그인 시 오류가 발생하지 않아요!
✅ 2. 커스텀 예외 응답 포맷 설정
# config/settings.py
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'utils.exceptions.custom_exception_handler',
}
# utils/exceptions.py
from rest_framework.views import exception_handler
def custom_exception_handler(exc, context):
response = exception_handler(exc, context)
if response is not None:
response.data = {
"status_code": response.status_code,
"errors": response.data
}
return response
✅ 예외 응답을 일관된 포맷으로 만들어 프론트엔드와의 연동이 쉬워집니다.
✅ 3. Serializer 유효성 검사 + 커스텀 메시지
# users/serializers.py
from rest_framework import serializers
from .models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['email', 'password']
extra_kwargs = {
'password': {'write_only': True, 'min_length': 6},
}
def validate_email(self, value):
if User.objects.filter(email=value).exists():
raise serializers.ValidationError("이미 등록된 이메일입니다.")
return value
✅ validate_필드명() 함수를 사용하면 특정 필드의 조건을 세부적으로 설정할 수 있어요.
✅ 4. JWT 토큰 기반 로그인 응답
# 로그인 성공 후 응답 예시
{
"message": "로그인 성공",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"email": "test@example.com",
"nickname": "시연공주"
}
}
✅ 토큰 발급 후 user 정보를 함께 넘기면 프론트에서 바로 유저 상태를 갱신할 수 있어요.
📌 실전 경험 메모
Docverse 프로젝트에서 회원가입 기능을 구현할 때, 처음엔 set_password()를 누락해서 로그인할 수 없다는 오류를 겪었어요.
이 문제를 통해 Django의 사용자 인증 시스템을 정확히 이해하는 것이 얼마나 중요한지를 깨달았습니다.
또한 프론트엔드 팀과 협업하면서 예외 응답 포맷을 통일하자고 제안했고, 커스텀 핸들러를 도입하게 되었어요.
🧾 마무리 요약
코드 목적포인트 요약
회원가입 API | set_password()로 반드시 비밀번호 해시화 |
커스텀 예외 응답 | 일관된 JSON 포맷으로 에러 처리 |
유효성 검사 | validate_email 같은 커스텀 로직 구현 가능 |
로그인 응답 포맷 | 토큰 + 유저 정보 함께 전달로 UX 향상 |
'🍳Python 프로젝트 레시피' 카테고리의 다른 글
🧑🍳 Python 프로젝트 레시피: Part 5 (0) | 2025.05.12 |
---|---|
🧑🍳 Python 프로젝트 레시피: Part 4 (0) | 2025.05.12 |
🧑🍳 Python 프로젝트 레시피: Part 3 (0) | 2025.05.12 |
🧑🍳 Python 프로젝트 레시피: Part 2 (0) | 2025.05.12 |
🧑🍳 Python 프로젝트 레시피: Part 1 (0) | 2025.05.12 |