Skip to content

Commit

Permalink
'FEAT:02-01'
Browse files Browse the repository at this point in the history
  • Loading branch information
jelee2555 committed Aug 29, 2023
1 parent 8ed171a commit 4b9b64a
Show file tree
Hide file tree
Showing 8 changed files with 68 additions and 22 deletions.
Binary file modified accounts/__pycache__/models.cpython-311.pyc
Binary file not shown.
Binary file modified accounts/__pycache__/serializers.cpython-311.pyc
Binary file not shown.
Binary file modified accounts/__pycache__/urls.cpython-311.pyc
Binary file not shown.
Binary file modified accounts/__pycache__/views.cpython-311.pyc
Binary file not shown.
16 changes: 14 additions & 2 deletions accounts/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,18 +59,30 @@ class User(AbstractBaseUser, PermissionsMixin):
REQUIRED_FIELDS = ['nickname']

# class Userinfo(models.Model):
# user = models.ForeignKey(User, models.DO_NOTHING, blank=True, null=True)
# user = models.ForeignKey(User, related_name='user', on_delete=models.CASCADE, null=False)
# height = models.IntegerField(blank=True, null=True)
# weight = models.FloatField(blank=True, null=True)
# bmi = models.FloatField(blank=True, null=True)
# info = models.CharField(max_length=100, blank=True, null=True)
# accvisibility = models.IntegerField(db_column='accVisibility', blank=True, null=True) # Field name made lowercase.
# acc_visibility = models.IntegerField(db_column='accVisibility', blank=True, null=True) # Field name made lowercase.
#
# class Meta:
# managed = False
# db_table = 'userinfo'
# db_table_comment = '사용자 정보'

class Userinfo(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user")
height = models.IntegerField(blank=True, null=True)
weight = models.FloatField(blank=True, null=True)
bmi = models.FloatField(blank=True, null=True)
info = models.CharField(max_length=150, blank=True, null=True)
acc_visibility = models.IntegerField()

class Meta:
managed = False
db_table = 'userinfo'


class Follow(models.Model):
id = models.AutoField(primary_key=True)
Expand Down
8 changes: 7 additions & 1 deletion accounts/serializers.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import requests
from rest_framework import serializers

from accounts.models import User, Follow
from accounts.models import User, Follow, Userinfo


class UserSerializer(serializers.ModelSerializer):
Expand All @@ -21,3 +22,8 @@ class FollowSerializer(serializers.ModelSerializer):
class Meta:
model = Follow
fields = '__all__'

class UserinfoSerializer(serializers.ModelSerializer):
class Meta:
model = Userinfo
fields = '__all__'
3 changes: 2 additions & 1 deletion accounts/urls.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from django.urls import path, include

from accounts.views import SigninAPIView, AuthAPIView, FollowAPIView
from accounts.views import SigninAPIView, AuthAPIView, FollowAPIView, UserinfoAPIView

urlpatterns = [
# path('', include('dj_rest_auth.urls')),
# path('signin/', include('dj_rest_auth.registration.urls')),
path('signin/', SigninAPIView.as_view()),
path('auth/', AuthAPIView.as_view()),
path('follow/', FollowAPIView.as_view()),
path('info/', UserinfoAPIView.as_view()),
]
63 changes: 45 additions & 18 deletions accounts/views.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
import jwt
from django.contrib.auth import authenticate
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import get_object_or_404
from rest_framework import status
from rest_framework.permissions import IsAuthenticated, AllowAny
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer, TokenRefreshSerializer

from accounts.models import User, Follow
from accounts.serializers import UserSerializer, FollowSerializer
from accounts.models import User, Follow, Userinfo
from accounts.serializers import UserSerializer, FollowSerializer, UserinfoSerializer
from accounts.utils import login_check
from my_settings import SECRET_KEY

Expand Down Expand Up @@ -56,19 +53,34 @@ def get(self, request):
serializer = UserSerializer(instance=user)
return Response(serializer.data, status=status.HTTP_200_OK)
# token이 만료되었을 때
except(jwt.ExpiredSignatureError):
data = {'refresh': request.COOKIES('refresh', None)}
serializer = TokenRefreshSerializer(data=data)
# except(jwt.exceptions.ExpiredSignatureError):
# data = {'refresh': request.COOKIES.get('refresh', None)}
# serializer = TokenRefreshSerializer(data=data)
# if serializer.is_valid(raise_exception=True):
# access = serializer.data.get('access', None)
# refresh = serializer.data.get('refresh', None)
# payload = jwt.decode(access, SECRET_KEY, algorithms=['HS256'])
# pk = payload.get('user_id')
# user = get_object_or_404(User, pk=pk)
# serializer = UserSerializer(instance=user)
# res = Response(serializer.data, status=status.HTTP_200_OK)
# res.set_cookie('access', access)
# res.set_cookie('refresh', refresh)
# return res
# raise jwt.exceptions.InvalidTokenError
except(jwt.exceptions.ExpiredSignatureError):
data = {'refresh': request.COOKIES.get('refresh', None)}
serializer = TokenObtainPairSerializer(data=data)
if serializer.is_valid(raise_exception=True):
access = serializer.data.get('access', None)
refresh = serializer.data.get('refresh', None)
access = serializer.data.get('access_token', None)
refresh = serializer.data.get('refresh_token', None)
payload = jwt.decode(access, SECRET_KEY, algorithms=['HS256'])
pk = payload.get('user_id')
user = get_object_or_404(User, pk=pk)
serializer = UserSerializer(instance=user)
res = Response(serializer.data, status=status.HTTP_200_OK)
res.set_cookie('access', access)
res.set_cookie('refresh', refresh)
res.set_cookie('access_token', access)
res.set_cookie('refresh_token', refresh)
return res
raise jwt.exceptions.InvalidTokenError
# 사용 불가능한 토큰일 때
Expand Down Expand Up @@ -131,13 +143,9 @@ def get(self, request):
# API 08-02, 08-03 팔로우, 언팔로우
@login_check
def post(self, request):
print(request.user)
following_id = request.data.get('following_id')
print(following_id)
user_following = get_object_or_404(User, id=following_id)

print(user_following)

if user_following == request.user:
return Response({'message': "Can't Follow Self"}, status=status.HTTP_400_BAD_REQUEST)

Expand All @@ -156,8 +164,27 @@ def post(self, request):
return Response({'messages': message}, status=status.HTTP_200_OK)


class UserinfoAPIView(APIView):
# API 02-01 회원 정보 입력
# BMI 계산 추가
@login_check
def post(self, request):
# User의 userinfo가 존재하는 지 확인
is_exist = Userinfo.objects.filter(user_id=request.user.id)
if is_exist:
return Response({'message': 'User already had Userinfo'}, status=status.HTTP_400_BAD_REQUEST)

# user 설정
request.data['user'] = request.user.id

# bmi 계산
weight = request.data.get('weight')
height = request.data.get('height') * 0.01
bmi = round(weight / (height * height), 2)
request.data['bmi'] = bmi



serializer = UserinfoSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

0 comments on commit 4b9b64a

Please sign in to comment.