generated from wecode-bootcamp-korea/backend-2nd-project-template
/
views.py
81 lines (66 loc) · 2.89 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import json
from datetime import datetime, timedelta
import bcrypt
import jwt
from django.http import JsonResponse
from django.views import View
from django.conf import settings
from users.models import User, PetType
from users.utils import (
validate_name,
validate_email,
validate_password,
validate_mobile_number,
login_decorator,
)
class SignUpView(View):
def post(self, request):
try:
data = json.loads(request.body)
name = data["name"]
email = data["email"]
password = data["password"]
mobile_number = data["mobile_number"]
address = data["address"]
email_subscription = data["email_subscription"]
pet_type = PetType.objects.get(id=data['pet_type'])
validate_name(name)
validate_email(email)
validate_password(password)
validate_mobile_number(mobile_number)
signup_point = 1000
hashed_password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8")
User.objects.create(
name = name,
email = email,
password = hashed_password,
mobile_number = mobile_number,
address = address,
email_subscription = email_subscription,
membership_point = signup_point,
pet_type = pet_type,
)
return JsonResponse({"message": "SUCCESS"}, status=201)
except KeyError:
return JsonResponse({"message": "KEY_ERROR"}, status=400)
except json.JSONDecodeError:
return JsonResponse({"message": "JSON_DECODE_ERROR"}, status=400)
class SignInView(View):
def post(self, request):
try:
data = json.loads(request.body)
email = data["email"]
password = data["password"]
user = User.objects.get(email=email)
if not bcrypt.checkpw(password.encode("utf-8"), user.password.encode("utf-8")):
return JsonResponse({"message": "INVALID_USER"}, status=401)
exp_days = 1
payload = {'id': user.id, 'exp': datetime.utcnow() + timedelta(days = exp_days)}
access_token = jwt.encode(payload, settings.SECRET_KEY, algorithm=settings.ALGORITHM)
return JsonResponse({"message": "SUCCESS", "ACCESS_TOKEN": access_token}, status=200)
except KeyError:
return JsonResponse({"message": "KEY_ERROR"}, status=400)
except User.DoesNotExist:
return JsonResponse({"message": "INVALID_USER"}, status=401)
except json.JSONDecodeError:
return JsonResponse({"message": "JSON_DECODE_ERROR"}, status=400)