Django : Westagram #1 모델링 및 회원가입

Jinsung·2021년 11월 25일
0
post-custom-banner

1.User App 생성

python manage.py startapp users```

User 테이블 생성

다양한 필드가 있지만 CharField로 통일했습니다.


class User(models.Model):
    name       = models.CharField(max_length=45)
    email      = models.CharField(max_length=200, unique=True)
    password   = models.CharField(max_length=200)
    phone      = models.CharField(max_length=50)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'users'

Views.py 회원가입 구현

전체 코드

import re, json

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

from .models                import User

class SignUpView(View):
    def post(self, request):
        try:
            data         = json.loads(request.body)
            name         = data["name"]
            email        = data['email']
            password     = data["password"]
            phone        = data["phone"]
            email_regex  = '^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$'
            passwd_regex = '^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$'

            if User.objects.filter(email=email).exists():
                return JsonResponse({"message" : "EMAIL_ALREADY_EXISTS"}, status=400)

            if not re.match(email_regex, email):
                return JsonResponse({"message": "EMAIL_ERROR"}, status=400)

            if not re.match(passwd_regex, password):
                return JsonResponse({"message": "PASSWORD_ERROR"}, status=400)

            User.objects.create(
                name     = name,
                email    = email,
                passwd   = password,
                phone    = phone
                )
            return JsonResponse({"message": "Success"}, status = 201)
        
        except KeyError:
            return JsonResponse({"message": "KEY_ERROR"}, status=400)

json파일 요청을 python 으로 변경하고 데이터를 받는다.

            data         = json.loads(request.body)
            name         = data["name"]
            email        = data['email']
            password     = data["password"]
            phone        = data["phone"]

email, password 정규식을 설정한 후 변수로 지정

한번 해보면 읽을 수는 있게 됩니다.
https://programmers.co.kr/learn/courses/11

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

이메일 중복확인
User 객체에서 입력받은 email을 필터로 나오면 중복이 확인되어 에러 출력

            if User.objects.filter(email=email).exists():
                return JsonResponse({"message" : "EMAIL_ALREADY_EXISTS"}, status=400)

정규식 과 입력과 비교
패스워드 이메일 정규식과 비교
re.match(비교할 정규식, 입력값)

            if not re.match(email_regex, email):
                return JsonResponse({"message": "EMAIL_ERROR"}, status=400)

            if not re.match(passwd_regex, password):
                return JsonResponse({"message": "PASSWORD_ERROR"}, status=400)

위 조건을 다 지나오면 DB에 데이터 생성

            User.objects.create(
                name     = name,
                email    = email,
                passwd   = password,
                phone    = phone
                )

TIP
입력값이 없을 경우 KeyError 발생
except로 잡아준다

        except KeyError:
            return JsonResponse({"message": "KEY_ERROR"}, status=400)
post-custom-banner

0개의 댓글