본문 바로가기
카테고리 없음

DRF. views.py

by abccoco 2022. 6. 16.

이번에는 새로운 방식으로 views.py를 작성할 수 있었다.

기존에 post, get 방식으로 데이터를 주고 받을 때에는 method = "GET or POST" 라고 작성해 주어야 했지만,

이제는 그런 방식이 아닌 def 뒤에 메소드를 적어주면 해당하는 메소드로 데이터를 주고 받을 수 있다.

* 각 코드의 추가적인 해설은 주석으로 작성했다.

 

 

이번에도 먼저 임포트를 해주자.

임포트에서 유의할점은 rest_framework 에서 임포트를 한다는 점이다 문서를 볼때 rest로 검색해야 한다는것!

from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework import permissions
from rest_framework.response import Response

 

다음으로 UserView를 작성해 보자.

임포트한 permissions 를 사용해서,

permissions 뒤에 IsAuthenticated, IsAdminUser, AllowAny 중 어떤것을 사용하느냐에 따라

class에 조회할 수 있는 대상을 정할 수 있다.

또한 이번에는 이전의 코드와 다르게 def 다음 method 값을 작성해 주는것만으로 데이터를 주고 받을 수 있다. 

class UserView(APIView):
    # permission_classes = [permissions.AllowAny]  # 누구나 view 조회 가능
    # permission_classes = [permissions.IsAdminUser] # admin만 view 조회 가능
    permission_classes = [permissions.IsAuthenticated]  # 로그인 된 사용자만 view 조회 가능

    # 사용자 정보 조회
    def get(self, request):
        return Response({"message": "get method"})

    # 회원가입
    def post(self, request):
        return Response({"message": "post method!!"})

    # 회원 정보 수정
    def put(self, request):
        return Response({"message": "put method!!"})

    # 회원 탈퇴
    def delete(self, request):
        return Response({"message": "delete method!!"})

 

다음으로 로그인 기능을 구현하는 view를 작성해보자

이 class를 작성하기 앞서 작업을 더 쉽게 해주는 임포트를 해주도록 하자.

from django.contrib.auth import login, logout, authenticate

 

다음으로 class를 작성해보자

class UserAPIView(APIView):
    # 로그인
    def post(self, request):
        # json 형식으로 데이터를 주고 받을 때는 data를 사용한다.
        # '' 빈칸은 값이 없을 때 디폴트 값을 str 형태로 비워놓는것을 의미한다.
        username = request.data.get('username', '')
        password = request.data.get('password', '')

        # 인증을 하지 못하면 None값이 담긴다.
        user = authenticate(request, username=username, password=password)

        if not user:
            return Response({"error": "존재하지 않는 계정이거나 패스워드가 일치하지 않습니다."})

        login(request, user)
        return Response({"message": "login success!!"})

    def delete(self, request):
        logout(request)
        return Response({"message": "logout success!!"})

 

 

여기까지 views.py도 작성 완료했다.!

댓글