728x90
django rest framework를 사용하다 보면 접할 수 있는 APIView 클래스와 api_view 장식자에 대해 알아보겠습니다.
우선 api_view부터 알아보겠습니다. api_view는 아래의 코드에서 확인할 수 있듯이 decorator입니다. api_view decorator는 첫 번째 인자는 해당 함수에서 사용할 수 있는 request method를 지정하는 것으로 형식은 리스트입니다.
@api_view(['GET', 'POST'])
def article_list_create_api_view(request):
if request.method == 'GET':
articles = Article.objects.filter(active=True)
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = ArticleSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
위의 코드는 GET, POST 함수를 request로 요청할 수 있고, 각각의 요청은 조건문에 의해 구분되어 그에 맞는 결과를 반환하게 됩니다.
다음은 APIView 입니다. APIView는 api_view와는 다르게 클래스로 정의됩니다. APIView를 상속받은 클래스 안에 request method에 맞는 함수들을 정의해주면 각각의 요청은 request method 이름에 맞게 구분되어 그에 맞는 결과를 반환하게 됩니다.
class ArticleListCreateAPIView(APIView):
def get(self, request):
articles = Article.objects.filter(active=True)
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data)
def post(self, request):
serializer = ArticleSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
article_list_create_api_view, ArticleListCreateAPIView는 함수와 클래스로 구현한다는 점에서는 차이가 존재하고, 코드 또한 다르지만 같은 기능을 합니다. 다음은 api 요청 결과 확인입니다.
728x90
'Python > Django' 카테고리의 다른 글
[Django] post_save()는 뭐야? (0) | 2021.07.12 |
---|---|
[Django] django-session-timeout은 뭐야? (0) | 2021.07.08 |
[Django] ImageField 저장 시 이름 변경하기 (0) | 2021.07.02 |
[Django] related_name은 뭐야? (0) | 2021.07.01 |
[Django] Javasrcipt에서 ORM 정보 사용하기 (0) | 2021.06.29 |