python manage.py startapp users```
다양한 필드가 있지만 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'
전체 코드
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)