티스토리 뷰
반응형
@action decorators
drf의 modelviewset을 쓰면서 해당 기본 기능 말고도 더 많은 기능들을 넣고 싶을 때 쓰면 유용한 데코레이터이다 .
하나의 예제를 보여주겠습니다. (아주 간단한 예시 입니다 . ㅎㅎ)
models.py
from django.db import models
class Memo(models.Model):
content = models.TextField()
title = models.CharField(max_length=20)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = models.Manager()
def __str__(self) -> str:
return self.title
serializers.py
from rest_framework.serializers import ModelSerializer
from .models import Memo
class MemoSerializer(ModelSerializer):
class Meta:
model = Memo
fields = ['title', 'content']
views.py
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
from rest_framework.decorators import action
from .models import Memo
from .serializers import MemoSerializer
class MemoModelViewSet(ModelViewSet):
queryset = Memo.objects.all()
serializer_class = MemoSerializer
@action(detail=False, methods=['GET'])
def recent_memo(self, request):
recent_memo = Memo.objects.all().order_by('-updated_at')
serializer = self.get_serializer(recent_memo, many=True)
return Response(serializer.data)
쓰는 방법은 원하는 함수 위에 어노테이션으로 @action을 적어주시고 해당 함수가 detail인지 여부를 확인하시고, methods는 get인지 post인지 또는 delete 등 crud 중 하나 이상의 메소드를 적어주시면 됩니다.
그리고 해당 기능에 맞게 구현하시면 됩니다.
urls.py
from django.urls import path
from .views import MemoModelViewSet
memo_list = MemoModelViewSet.as_view({"get": "list", "post": "create"})
memo_detail = MemoModelViewSet.as_view(
{"get": "retrieve", "patch": "partial_update", "delete": "destroy"})
urlpatterns = [
path("memo", memo_list),
path("memo/<int:pk>", memo_detail),
path("memo/recent", MemoModelViewSet.as_view({"get": "recent_memo"}))
]
urls에 표시 할 때에는 as_view() 메소드를 이용하여 해당 메소드가 get,post 등 표시해주고 값으로는 해당 함수의 이름을 적어주시면 됩니다 .
action 안에는 serializer 뿐만 아니라 permission에 관한 값도 설정할 수 있습니다 .
참고: https://www.django-rest-framework.org/api-guide/viewsets/#marking-extra-actions-for-routing
****추가 내용***
위의 참고 문서를 보면서 get_object() 무엇인지 궁금해서 찾아 보았다.
get_object()
- queryset과 pk값을 인자로 받아서 필터링하여 객체로 리턴해주는 메소드
참고:https://velog.io/@jcinsh/RetrieveUpdateDestroyView-%EC%9D%B4%ED%95%B4
위의 내용을 적은 내용 깃 헙 주소: https://github.com/VIXXPARK/django-remind/tree/main/django-action
반응형
'파이썬 > 장고' 카테고리의 다른 글
[django][shell] 깔끔하게 정리한 django 관련 스크립트 (0) | 2021.08.18 |
---|---|
[django][serializer] serializer 와 deserializer 구분하기 (0) | 2021.08.04 |
[django][celery][celery-beat][flower] docker를 통한 django와 celery 연동!! (2) | 2021.08.03 |
Object does not support item assignment error (0) | 2021.07.27 |
Docker-compose를 통한 Django + Nginx + Postgres 작업 [.dockerignore] [docker-compose 환경변수/env 파일 처리하기] (0) | 2021.07.21 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 카카오
- 파이썬
- Python
- env
- 백준
- Spring
- docker
- Java
- Command Line
- 2021 KAKAO BLIND RECRUITMENT
- setattr
- 알고리즘
- DRF
- ubuntu
- 자바
- 프로그래머스
- headers
- Pattern
- Collections
- Linux
- BFS
- Celery
- django
- 면접
- thread
- postgres
- docker-compose
- PostgreSQL
- 그래프
- dockerignore
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함