[Westagram] -8

김가람휘·2022년 2월 24일
0

Westagram

목록 보기
8/9

[Mission 10] 다른 계정 'follow' 기능 구현

1. User app 활용

2. Follow Model 생성

# users/models.py
class Follow(models.Model):
    followuser   = models.ForeignKey('User', on_delete=models.CASCADE, related_name='FollowUser')
    followeduser = models.ForeignKey('User', on_delete=models.CASCADE, related_name='FollowedUser')

    class Meta:
        db_table = 'follows'

3. Follow View 생성

# users/views.py
import json

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

from users.models     import User, Follow

class FollowView(View):
    def post(self, request):
        data = json.loads(request.body)
        try:
            followuser_id   = data['followuser_id']
            followeduser_id = data['followeduser_id']

            if not User.objects.filter(id = followuser_id and followeduser_id).exists():
                return JsonResponse({'message' : 'INVALID_USER'},status=401) 

            if Follow.objects.filter(followuser_id = followuser_id, followeduser_id = followeduser_id).exists():
                return JsonResponse({'message' : 'You have already followed'},status=401) 

            if Follow.objects.filter(followuser_id = followeduser_id).exists():
                return JsonResponse({'message' : 'It is the same user'},status=401)

            Follow.objects.create(
                followuser_id   = followuser_id,
                followeduser_id = followeduser_id
            )
            
            return JsonResponse({'message':'SUCCESS'}, status=201)

        except KeyError:
            return JsonResponse({'message' : 'KEY_ERROR'},status=400)

4. Urls.py 작성

# users/urls.py
from django.urls import path

from users.views import SignUpView, LoginView, FollowView

urlpatterns = [
    path('/signup', SignUpView.as_view()),
    path('/login', LoginView.as_view()),
    path('/follow', FollowView.as_view())
]

0개의 댓글