(TIL17) 회원가입/로그인 코드리뷰

SooHyung Kim·2020년 4월 17일
0

django

목록 보기
3/5

회원가입 뷰

before code

class CreateView(View):
    def post(self, request):
        data = json.loads(request.body)
        try:
            user = User(
                user_id     = data['user_id'],
                email       = data['email'],
                password    = data['password'],
            )
            
            if User.objects.filter(user_id = data['user_id']).exists() :
                return JsonResponse({"message" : "이미 존재하는 아이디입니다."}, status = 401)

            else:
                user.save()
                return JsonResponse({"message" : "회원으로 가입되셨습니다."}, status = 200)
  • 뷰의 이름은 Create와 같은 동사가 아닌 사용 목적에 부합하는 명사가 적절하며, 특히 Create와 같은 경우는 메소드로 많이 사용되기 때문에 이름으로 사용하기에는 특히 부적절함

  • 회원가입 실패 시 전달하는 JsonResponse에 너무 상세한 메시지는 해커에 정보를 제공할 수 있어 HttpResponse를 전달하는 것이 적절함

  • User의 정보를 저장하는 로직은 별도의 변수 생성 없이 직접적으로 삽입해주는 게 코드를 줄이는 효과를 낳음

review code

class UserView(View):
    def post(self, request):
        data = json.loads(request.body)
        try:
            if User.objects.filter(user_id = data['user_id']).exists() :
                return JsonResponse({"message" : "USER_ALREADY_EXIST"}, status = 401)
            User(
                user_id=data['user_id'],
                email=data['email'],
                password=data['password'],
            ).save()
            return HttpResponse(status = 200)
        except KeyError:
            return JsonResponse({'message' : "INVALID_KEYS"}, status = 400)

    def get(self, request):
        users = User.objects.values()
        return JsonResponse({"data" : list(users)}, status = 200)

로그인 뷰

class LoginView(View):
    def post(self, request):
        data = json.loads(request.body)

        if User.objects.filter(user_id = data['user_id'], password = data['password']).exists() : #user_id, password and 처리가 된다고 합니다.
            return JsonResponse({"message": "로그인에 성공하셨습니다."}, status = 200)
        else:
            return JsonResponse({"message" : "아이디나 비밀번호가 일치하지 않습니다."}, status = 401)
  • 로그인 역시 입력 실패 시 전송하는 JsonResponse를 너무 상세히 전달하지 않을 것
  • 발생할 수 있는 키에러를 except로 삽입
  • User id가 존재 할 경우 데이터베이스에서 해당 아이디를 가진 사용자의 패스워드의 일치 여부를 확인
class LoginView(View):
    def post(self, request):
        data = json.loads(request.body)
        try:
            if User.objects.filter(user_id = data['user_id']).exists() :
                if data['password'] == User.objects.get(user_id = data['user_id']).password:
                    return HttpResponse(status=200)
                return HttpResponse(status=401)
            return HttpResponse(status=401)
        except KeyError:
            return JsonResponse({'message' : "INVALID_KEYS"}, status = 400)
profile
Slow and steady win the race

0개의 댓글