์์คํ๊ทธ๋จ์ ์ํ ๊ธฐ๋ณธ์ ์ธ ์ ํ ์ด ๋ชจ๋ ๋๋ฌ๋ค! ์ด์ ์ค์ ์ผ๋ก ๋์ด๊ฐ ๋ก๊ทธ์ธ๊ณผ ํ์๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด์
- email validation์ ์ฉ(ํ์๊ฐ์ ์ ์ด๋ฉ์ผ์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ด๋ฉ์ผ์๋ @์ .์ด ํ์๋ก ํฌํจ๋์ด์ผ)
- password validation(ํ์๊ฐ์ ์ ๋น๋ฐ๋ฒํธ๋ 8์๋ฆฌ ์ด์.)
- ํ์๊ฐ์ ์ ๊ธฐ์กด์ ์กด์ฌํ๋ ์ด๋ฉ์ผ ์๋ฃ์ ์ค๋ณต๋์ด์๋ ์๋๋ค-> ์ ์ ํ ์๋ฌ๋ฅผ ๋ฐํ.
- [์ถ๊ฐ ๊ตฌํ ์ฌํญ] -> email validation ๋๋ password validation ๊ณผ์ ์์ ์ ๊ท์์ ์ฌ์ฉํด๋ณด๊ธฐ
- ์ธ์คํ๊ทธ๋จ์ ๋ก๊ทธ์ธ ์ ๋น๋ฐ๋ฒํธ๊ฐ ํ์๋ก ํ์
from django.db import models
class Account(models.Model):
email = models.EmailField(max_length=200, unique=True)
password = models.CharField(max_length=200)
updated_at = models.DateTimeField(auto_now=True)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = 'Accounts'
def __str__(self):
return self.name
1)์ด๋ฉ์ผ๊ณผ ํจ์ค์๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ฑํ๋ค.
Email์ ๊ฒฝ์ฐ ๊ณ ์ ๊ฐ์ ์ค์ผํ๋ฏ๋ก unique=True
๋ฅผ ๋ฃ๊ณ , ์ค๋ณต๋๋ ๊ฐ์ด ์ฌ๊ฒฝ์ฐ error๊ฐ ๋ฐ์ํ๊ฒ ํ๋ค.
2)์ฌ๊ธฐ์ ์ถ๊ฐ๋ก ๊ผญ ๋ฃ์ผ๋ฉด ์ข์๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ์ ์ด ๊ณ์ ์ด ์ถ๊ฐ๋๊ณ , ๋ณ๊ฒฝ๋์๋์ง๋ฅผ ์๋ ค์ฃผ๋ updated_at
,created_at
๋ฅผ ์ ์ฉํ์๋ค.
๋ฉ๋ถ์ ์์
import json, re
from django.http import JsonResponse
from django.views import View
from user.models import Account
class AccountView(View):
def post(self, request):
data = json.loads(request.body)
REGAX_EMAIL = '^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
REGEX_PASSWORD = '^[A-Za-z0-9@#$%^&+=]{8,}$'
try:
if not re.match(email_validation, data['email']):
return JsonResponse(
{"message":"INVALID_MAIL"},status=401
)
if not re.match(pw_validation, data['password']):
return JsonResponse(
{"message":"INVALID_PW"},status=401
)
if Account.objects.filter(email=data['email']).exists():
return JsonResponse(
{"message":"USER_EXIST"},status=400
)
else:
Account.objects.create(
email = data['email'],
password = data['password']
)
return JsonResponse({"message":"SUCCESS"},status=200)
except:
return JsonResponse({"message":"KEY_ERROR"},status=401)
์ฒ์ ์๋๋ ๋ฉํ ๋๊ณผ ์์ํ์ฌ ๋ฏธ์
์ ๋ด์ฉ์ ๊ฑฐ์ ๋ฌด์ํ๊ณ ํจ์ค์์ค์ ์์ด๋์ ๋ฌด์จ ๊ฐ์ ๋ฃ๋ ํต์ ๋ง ๋๋ฉด okํ์!์๋ค. ๊ทธ๊ฑธ ์์ฑํ๋ฉฐ ๊ธฐ๋ณธํ์ด์กํ์ ์ถ๊ฐ์ ์ผ๋ก email์ ํจ์ฑ๊ณผ, password์ ํจ์ฑ ๊ทธ๋ฆฌ๊ณ ์ ๊ทํ์ ๊ด๋ จ๋ ๋ด์ฉ์ ์ถ๊ฐํ๋๋ฐ, ์ด๋ถ๋ถ์ ์ฐจํ์ ๋ค์ ์๊ฐ์ด๋๋ฉด(๋ ์ง๋ชจ๋ฅด๊ฒ ๋ค..)์ ๋ฆฌํ๊ฒ ๋ค.
ํ์๊ฐ์ ํด๋์ค ๋ฐ๋ก ๋ฐ์ ์๋ก ํด๋์ค๋ฅผ ๋ฃ์๋ค
class LoginView(View):
def post(self, request):
data = json.loads(request.body)
try:
if Account.objects.all().filter(email=data['email'],password=data['password']).exists():
return JsonResponse({"message":"SUCCESS", "TOKEN" : access_token},status=200)
else:
return JsonResponse({"message":"INVALID_PASSWORD"},status=402)
except KeyError:
return JsonResponse({"message":"KEY_ERROR"},status=401)
except ValueError:
return JsonResponse({"message":"INVALID_USER"},status=401)
westagram(projectํ์ผ)/urls.py
#from django.contrib import admin
from django.urls import path,include
urlpatterns = [
# path('admin/', admin.site.urls),
path('user',include('user.urls')),
]
user/urls.py
from django.urls import path,include
from .views import AccountView,LoginView
urlpatterns = [
path('/account', AccountView.as_view()),
path('/login', LoginView.as_view())
]
urls.py๊ฐ ๋๊ฐ์๊ณ ์ค๋ํฌ์ธํธ์ ๊ดํด ์ง์ ํด ์ฃผ์๋ค.
์์์ ์ โญ๏ธโญ๏ธโญ๏ธโญ๏ธrunserver
โญ๏ธโญ๏ธโญ๏ธโญ๏ธํ์ธ์~
200OK!!!!
์ง๊ธ ์ฌ๋ฆฐ ์ฌ์ง์ ์ํธ,์ด๋ฉ์ผ ์ ํจํ๊ฒ์ฌ๋ฅผ ํ์ง ์์ ์ ๋ง ์ฒ์์ ๋ ๊ฒ(?)๊ทธ๋๋ก ์ฌ์ง์ด๋ค.. ๊ทผ๋ฐ ์ด๊ฑฐ ๋๋ ์๊ฐ ์ผ๋ง๋ ๊ธฐ๋ปค๋์ง!!!
์ด ๊ธฐ์จ์ ์ํธํ์์ ํฝใ
ํใ
ํ๋ค
To be continue๐น