회원가입 views.py 작성

이유진·2021년 11월 22일
0

Westagram

목록 보기
1/3
post-thumbnail

'westagram' 프로젝트를 진행하면서, 필수적으로 구현해야하는 기능에 대해서 내가 잘못 작성했던 것들과 개선해야 할 점들을 수정 전수정 후를 비교하면서 기록해보려고 한다.

이번에는 views.py에서 회원가입 기능 구현에 대해서 작성해 볼 것이다!




현재까지(or 최종) : views.py에 작성한 회원가입 작성한 내용 👇




1. import 위치 수정, 합치기

*처음에 작성한 코드👇

[개선 할 점, 깨달은점]

  • jsonre를 import를 해올때,
    각각 한줄 한줄 import해오는 걸로 코드를 작성하는 것보다
    ,(컴마)를 이용하여 한 줄에 같이 작성하는게 훨씬 간결하게 코드를 작성 할 수 있다.

  • 가장 상단으로 올리는 이유...는 좀더 검색해 보는 걸로!


[개선점 반영 후 👇]

import json, re

from django.http  import JsonResponse
from django.views import View

from .models import User



2. if 조건문 잘못 작성

*처음에 작성한 코드👇

[개선 할 점, 깨달은점]

if 조건문 :
	return

if 조건문을 작성 할때,
조건문이 True 값이 나오면, return을 반환해준다!
반대로 조건문에 부합하면, 해당 조건문을 탈출?할 것이다.

인데,
이미 조건문 자체적으로 True, False 인지 판단 할 수 있기 때문에
조건문 값 그대로 사용한다.
굳이, == None, == False, == 0라고 표현하지 않아도 된다.

== None 으로 작성하는 방식 보다는,

조건문 앞에 not을 활용하여 작성하는게 좋다!

는 것을 배웠다.

[개선점 반영 후 👇]

if not re.match('^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$', user_email):  
	return JsonResponse({"message": "EMAIL_ERROR"}, status=400)
                

if not re.match('^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$', user_password):
	return JsonResponse({"message": "PASSWORD_ERROR"}, status=400)



3. 이메일 중복 확인하는 방법

이미 저장 되어 있다! ==> 메소드 .filter()을 이용하기.

*filter() 메소드 : 조건에 부합하는 QuerySet으로 여러개의 객체를 리스트에 담아서 불러온다.

*exists() : QuerySet에 있는 객체가 존재하는지 확인 여부를 알려준다.
(불필요한 QuerySet 캐시를 만들지 않기 때문에, 비효율 방지 가능)

if User.objects.filter(email=user_email).exists():
	return JsonResponse({"message" : "이미 존재하는 이메일입니다. 이메일을 다시 입력해주세요."}, status=400)

여기서, 왜!!
filter( )만 작성하고 조건문이 끝이 아니고,
filter( ).eixists() 까지 작성하는게 효율적인가?
에 대해 궁금증이 발생했다.

만약, 중복된 이메일을 출력하는 것이였다면! filter( )까지 작성해도 되었을 것이지만,
하지만, 내가 구현해야 하는 것은 '중복 여부 확인'이기 때문에 filter의 하부 메소드인 filter( ).eixists( )까지 작성해 주는 것이 좀더 효율적(시간절약)이다...

if ~ filter( ):
라고만 작성하는 것보다,
 
if ~ filter( ).exists():
를 작성하였을때, 존재 여부만 확인하여 시간절약을 할 수 있다.



4. 정규식 표현

우선,
정규식 표현이란 ?
정규식 표현을 사용하는 이유는 ?

*처음에 작성한 코드 👇>

import re

users_email    = re.complie('^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$')
users_password = re.complie('^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$')

class UserView(View):
	def post(self, requst):
	    data = json.loads(requst.body)
            user_email    = data['email'] 
            user_password = data['password']
    
    try:
	if re.match(user_email, user_email) is None:
    	    ruturn JsonResponse({"message" : "KEY_ERROR"}, status=400)
            
    	if re.match(user_password, user_password) is None:
    	    ruturn JsonResponse({"message" : "KEY_ERROR"}, status=400)
            

수정 전에 작성한 코드는

  • class 밖에
    re.compile을 통해 'users_email'과 'users_password'에 변수 선언 한 후에,
  • if 조건문에 '정규식표현식을 만든 변수(users_email, users_password)'와
    '입력받은 이메일(=user_email)'과 '입력받은 패스워드(=user_password)'로 코드를 작성하였다.

[개선 할 점, 깨달은점]

해당 정규식을 여러번 사용할 경우에,
가독성을 위해 변수를 선언하여 코드를 작성하는게 좋으나,s
현재 작성하는 것처럼 한번씩만 사용할 경우엔, re.match만으로 작성하는게 좋다.


[개선점 반영 후 👇]
if not re.match('^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$', user_email):  
	return JsonResponse({"message": "EMAIL_ERROR"}, status=400)
                

if not re.match('^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$', user_password):
	return JsonResponse({"message": "PASSWORD_ERROR"}, status=400)



5. 메세지 문구 수정 필요

*처음에 작성한 코드 👇

[massege 내용을 길게 한글로 작성한 이유]
--> 내가 views.py에서 오류 메세지나 올바른 메세지를 작성할때,
한글로 작성하면 타인이 쉽게 알아 볼 수 있도록 한글로 자세하고 길게 작성하였다.


여기서 잠깐!!
내가 놓치고 넘어간 개념 부분이 발생했던 것이다.🤦‍♀️🤦

우리가 return할 때도, JsonResponse를 반환해서 작성하는 이유가 무엇이냐는 것이다!
바로,
프론트엔드 개발자와 Json 형태로 소통하기 위함이라는 것을 잊어버리고 있었던 것이다....//저런 😶‍🌫️😶‍🌫️😶‍🌫️


[깨달은 점]

즉, Json형태로 메세지를 작성할 땐,
프론트엔드 개발자가 알아볼수 있게 간단명료 하지만
어떤 메세지를 담고 있는지를 정확하게 작성하는게 좋다는 것을 배웠다.


[개선점 반영 후 👇]
if User.objects.filter(email=user_email).exists():
   return JsonResponse({"message" : "email_alreay_exists"}, status=400)



  1. 'try와 except 구문' 과 예외처리
profile
차근차근 배워나가는 주니어 개발자

0개의 댓글