이번에는 새로운 방식으로 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도 작성 완료했다.!
댓글