Skip to content

Commit

Permalink
♻️Refact : 코드 리팩토링
Browse files Browse the repository at this point in the history
################
- views.py 예외처리 추가
- UserSerializer 변경 -> 이메일 변경방지

################
I-deul-of-zoo#4
  • Loading branch information
tneoeo2 committed Oct 27, 2023
1 parent 768f7e8 commit 7f70aa2
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 41 deletions.
16 changes: 6 additions & 10 deletions accounts/serializers.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
from rest_framework import serializers
from .models import User

class UserSerializer(serializers.ModelSerializer):
class UserCreateSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['username', 'email', 'auth_code']
extra_kwargs = {
'email': {'read_only': True},
}
fields = ['username', 'email', 'password']

class UserCreateSerializer(serializers.ModelSerializer):

class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['username', 'email', 'password', 'auth_code']
extra_kwargs = {
'auth_code': {'read_only': True},
}
fields = ['username', 'email', 'auth_code']
read_only_fields = ['email']
63 changes: 32 additions & 31 deletions accounts/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.generics import CreateAPIView, RetrieveAPIView
# from django.core.mail import send_mail
from django.shortcuts import get_object_or_404
from rest_framework.decorators import permission_classes
from rest_framework.permissions import AllowAny
from django.core.mail import EmailMessage
Expand All @@ -14,14 +14,10 @@


# Create your views here.
'''
username(해시태그)
email
입력시 유저 생성 후 이메일 보냄
'''
#? /auth/registration/
#! /auth/registration/ -> 테스트용
class UserCreateView(CreateAPIView):
serializer_class = UserCreateSerializer

def perform_create(self, serializer):
data = serializer.validated_data
username = data['username']
Expand All @@ -43,18 +39,18 @@ def perform_create(self, serializer):
}

print("response_data: ", response_data)
# send_mail(subject, message, from_email) #* 이메일 발송은 생략
# send_mail(subject, message, from_email) #* 이메일 발송은 생략 -> 회원생성과 동시에 이메일 발송할 경우
return Response(response_data, status = status.HTTP_201_CREATED)

#? /auth/code/
#? /auth/code/ : 가입승인코드 일치 확인
class UserActivationView(APIView): # 가입승인코드 확인
serializer_class = UserSerializer
def post(self, request):
user = request.data.get('username')
auth_code = request.data.get('auth_code')
# email = request.data.get('email')
user = User.objects.get(username=user)
# email = request.data.get('email') # 이메일 입력도 필요할 경우 사용
try:
user = User.objects.get(username=user)
if user.auth_code == auth_code:
user.auth_code = None # 인증된 유저는 인증코드 삭제
user.is_active = True
Expand All @@ -65,32 +61,37 @@ def post(self, request):
except User.DoesNotExist:
return Response({'message': '사용자를 찾을 수 없습니다.'}, status=status.HTTP_400_BAD_REQUEST)



#? /auth/<username>/ : username로 인증코드 메일전송 -> 이메일 재발송이 필요한경우
class SendEmailView(RetrieveAPIView):
permission_classes = [AllowAny]
serializer = UserSerializer
lookup_field = 'username'

def get(self, request, username):
user = self.get_queryset()
# smtp사용해서 메일보내는 코드
try:
subject = "메일제목"
email = user.email
auth_code = user.auth_code
to = [email]
message = auth_code # 메일 내용 #최초 회원가입시도시 생성된 인증코드

#* EmailMessage(subject=subject, body=message, to=to).send() # 메일 보내기
# Response 확인용
response_data = {
'subject': subject,
'message': message,
'to': to,
}
return Response({'메일 전송 완료':response_data}, status=status.HTTP_200_OK)
except Exception as e:
return Response({'message': '사용자를 찾을 수 없습니다.'}, status=status.HTTP_400_BAD_REQUEST)
# user = self.get_queryset()
user = get_object_or_404(User, username=username)
if user.auth_code:
try:
subject = "메일제목"
email = user.email
auth_code = user.auth_code
to = [email]
message = auth_code # 메일 내용 #최초 회원가입시도시 생성된 인증코드

#* EmailMessage(subject=subject, body=message, to=to).send() # 메일 보내기

# Response 확인용
response_data = {
'subject': subject,
'message': message,
'to': to,
}
return Response({'메일 전송 완료':response_data}, status=status.HTTP_200_OK)
except Exception as e:
return Response({'message': '메일 전송 중 오류가 발생했습니다.'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
else:
return Response({'message': '사용자를 찾을 수 없거나 인증 코드가 존재하지 않습니다.'}, status=status.HTTP_404_NOT_FOUND)

def get_queryset(self):
username = self.kwargs['username']
Expand Down

0 comments on commit 7f70aa2

Please sign in to comment.