[Django][Westagram] - Sign_up, Sign_in 구현

김진수·2021년 1월 1일

westagram(wecode)

목록 보기
2/2
post-thumbnail

django를 이용해서 회원가입을 구현해보았다.

나의 views 와 models

views

import json
import bcrypt
from django.views import View 
from .models import Users
from django.http import JsonResponse
from user.utils import login_decorator

# Create your views here.
class Sign_Up(View):
    def post(self, request):
        data         = json.loads(request.body)
        LEN_PASSWORD = 8
        try:
            phone_number = data['phone_number']
            user_name    = data['user_name']
            email        = data['email']
            password     = data['password']

            if Users.objects.filter(user_name = user_name, phone_number = phone_number).exists() == True or Users.objects.filter(email = email).exists() == True:
                return JsonResponse({"message" :"이미 회원가입이 되어 있습니다."}, status = 400)
        
            elif len(password) < LEN_PASSWORD:
                return JsonResponse({"message" :"비밀번호를 8자리 이상 입력해주세요."}, status = 400)

            Users.objects.create(phone_number = phone_number,
                                user_name     = user_name,
                                email         = email,
                                password      = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
                                )
            return JsonResponse({"message" :"SUCCESS"}, status = 200)

        except KeyError as e:
            return JsonResponse({"message" : e.args[0]}, status = 400)
    
        
        
class Sign_in(View):
    def post(self, request):
        data  = json.loads(request.body)
        try:
            account  = data['account']
            new_password = data['password']

            if Users.objects.filter(Q(user_name=account) | Q(phone_number=account)|Q(email =account)).exists()==True 
            and Users.objects.filter(password=bcrypt.checkpw(new_password.encode('utf-8'),password)).exists() == True:
                return JsonResponse( {"message": "SUCCESS"}, status = 200)

            return JsonResponse({"message": "INVALID_USER"}, status = 401) 

        except KeyError as e:
            return JsonResponse({"message" : e.args[0]}, status = 400)
            

models 

import datetime
from django.db import models

# 사용자
class Users(models.Model):
    
    phone_number = models.CharField(max_length = 50)
    user_name    = models.CharField(max_length = 50)
    email        = models.EmailField(max_length = 254)
    password     = models.BinaryField(max_length = 500)
    
    class Meta:
        db_table = 'users'

Sign_in

회원가입은 if를 통해 사용자이름과, 전화번호가 있으면 이미 회원가입이 되어있다고 응답해주었고, 그리고, 비밀번호가 8자리 미만으로 들어오면, 비밀번호 8자리이상으로 입력하라는 응답을 해주었다 그리고, 요청이 들어올 때, 아이디 비밀번호를 입력안하고 요청하면 keyerror를 발생하여 어떤 부분에 keyerror가 발생하였는지 응답 해주었다. 마지막으로 정상적으로 처리되면 성공이라는 메세지를 응답하였다.

발전해야 하는 점

정규표현식으로 회원가입을 만들어 봄으로써 발전되고 싶다.

Sign_up

회원가입이 완료되었고, 로그인 부분을 보면, 로그인은 사용자이름과 전화번호 또는 이메일을 입력해야 한다. 그래서 if문을 통해 해당 조건을 걸어주었고, 정상적으로 if문이 처리되면 성공을 반환하였고, 아니면 유효하지 않은 사용자라는 응답을 해주었다. 또한 아이디 비밀번호를 입력안하고 요청하면 keyerror를 발생하여 어떤 부분에 keyerror가 발생하였는지 응답 해주었다.

아쉬운 점

회원가입과 마찬가지로 만약 해당 테이블에서 객체가 없으면 에러가 발생하기 때문에 그 부분을 예외처리를 통해 구현해야 한다고 생각했다.

발전해야 하는 점

정규표현식으로 로그인을 만들어 봄으로써 발전되고 싶다.

배운점

ObjectDoesNotExist 과 Models.DoesNotExist 차이이다.
Django에서는 Models.DoesNotExist를 사용하는 것을 더 선호한다고 나와있다.

이유는

  • 두개의 except 블록은 보다 명확해졌으며 특정 모델이 존재하지 않을 때만 예외를 포착한다.
  • 이것은 사소한 것이지만 ObjectDoesNotExist 를 현재 범위로 가져왔는지 여부는 걱정할 필요가 없다.
profile
백엔드 개발자

0개의 댓글