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)
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)