내일배움캠프 AI - 61일차 TIL, 2022.07.14

Dongwoo Kim·2022년 7월 14일
0

TIL / WIL

목록 보기
40/113

스파르타 코딩클럽

내일배움캠프 AI 웹개발자양성과정 2회차

2022.07.14. 61일차 - TIL

1. Docker 실무 강의 3주차 - (1)

내일배움캠프 - 도커 실무 강의 3주차 개발일지 - (1)

2. MyLittleTrip 유저 기능 구현

1) Serializer

: 회원가입, 회원 정보 조회, 수정을 위한 유저 serializer 구현

# user/serializers.py

from rest_framework import serializers

from .models import User as UserModel

class UserSerializer(serializers.ModelSerializer):
   class Meta:
        model = UserModel
        fields = ["username", "password", "fullname", "email"]

        extra_kwargs = {
            'password': {'write_only': True}
        }

   def create(self, validated_data):
      password = validated_data.pop('password')
      user = UserModel.objects.create(**validated_data)
      user.set_password(password)
      user.save()

      return user   

   def update(self, instance, validated_data):
        for key, value in validated_data.items():
            if key == "password":
                instance.set_password(value)
                continue
            
            setattr(instance, key, value)
        instance.save()
        return instance

2) View

: JWT 토큰을 이용한 로그인, JWT 토큰 재발급, 회원가입, 회원정보 조회, 수정, 삭제 기능 구현

# user/views.py

from django.contrib.auth import authenticate
from rest_framework import permissions, status
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework_simplejwt.authentication import JWTAuthentication


from .serializers import UserSerializer

# 유저 정보 기능
class UserInfoView(APIView):
    permission_classes = [permissions.AllowAny]
    authentication_classes = [JWTAuthentication]
    
    # 유저 정보 조회
    def get(self, request):
        return Response(UserSerializer(request.user).data, status=status.HTTP_200_OK)
    
    # 회원가입
    def post(self, request):
        user_serializer = UserSerializer(data = request.data)

        if user_serializer.is_valid():
            user_serializer.save()
            return Response({"message": "회원가입 성공"}, status=status.HTTP_200_OK)

        return Response(user_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    # 회원 정보 수정
    def put(self, request):
        user = request.user
        data = request.data

        # 현재 비밀번호를 잘못 입력했을 경우
        password = data.pop('password_current', '')
        user = authenticate(request, email=user.email, password=password)
        if not user:
            return Response({"error" : "비밀번호가 옳바르지 않습니다."}, status=status.HTTP_400_BAD_REQUEST)

        # 수정
        user_serializer = UserSerializer(user, data=data, partial=True)
        if user_serializer.is_valid():
            user_serializer.save()
            return Response({"message": "회원정보 수정 성공"}, status=status.HTTP_200_OK)

        return Response(user_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    # 회원 탈퇴
    def delete(self, request):
        user = request.user
        data = request.data

        # 현재 비밀번호를 잘못 입력했을 경우
        password = data.get('password', '')
        user = authenticate(request, email=user.email, password=password)
        if not user:
            return Response({"error" : "비밀번호가 옳바르지 않습니다."}, status=status.HTTP_400_BAD_REQUEST)

        # 회원 삭제
        user.delete()

        return Response({"message": "회원 삭제 성공"}, status=status.HTTP_200_OK)

3. 기타 자료

1) MyLittleTrip SA

https://www.notion.so/kimphysicsman/MLT-My-Little-Trip-716433a2fc8940d9870bd83b63570646?v=0c42e849923d4449aade69046bf597d1

2) MyLittleTrip Github

https://github.com/nbcamp-AI-2-fantastic4/MyLittelTrip_backend

profile
kimphysicsman

0개의 댓글