[DRF #2] Django REST framework

LILO Ghim·2021년 12월 29일
0
post-thumbnail

?????


DRF 2

Django REST framework 튜토리얼 #2

이제 CRUD를 해 볼 차례

아예 감도 못 잡고 있다가 꽤 도움이 된 영상 굿굿?


FBV와 CBV


API view를 작성하는데 두 가지 방식이 있다


  • FBV : Function Based View
  • CBV : Class Based View


먼저 함수형, FBV방식의 경우 @api_view를 사용하는데, class의 as_view()처럼 여러가지 method 처리를 한다고 보면 됨


시작하기전에,

request.data & request.POST의 차이!


(아무리 생각해도 S3만들때, form data로 request를 다 받아서 꺼내쓸 때 사용했던 그 request.POST 이게 이거 맞는것 같은데,,,,,)

AWS S3 object 대제전

맞는거 같은데,,,

1. models.py

# models.py
class Snippet(models.Model):
    created  = models.DateTimeField(auto_now_add=True)
    title    = models.CharField(max_length=100, blank=True, default='')
    code     = models.TextField()
    linenos  = models.BooleanField(default=False)
    language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
    style    = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)

    class Meta:
        ordering = ['created']

2. serializers.py

# serializers.py
class SnippetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Snippet
        fields = ['id', 'title', 'code', 'linenos', 'language', 'style']

3. views.py

view에서 넘겨 짚고 갈 것은,

  • 하나의 함수에서 하나 이상의 method를 사용하게 할 수 있는 wrapper가 있다는 점
  • many = True : 리스트로 반환 할 경우, many=False로 한다면, 하나만 반환할 수 있다.
# views.py
@api_view(['GET', 'POST'])
def snippet_list(request, format=None):
    if request.method == 'GET':
        snippets = Snippet.objects.all()
        serializer = SnippetSerializer(snippets, many=True)
        return Response(serializer.data)

    elif request.method == 'POST':
        serializer = SnippetSerializer(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)
        
        
@api_view(['GET', 'PUT', 'DELETE'])
def snippet_detail(request, pk, format=None):
    try:
        snippet = Snippet.objects.get(pk=pk)
    except Snippet.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)
    
    if request.method == 'GET':
        serializer = SnippetSerializer(snippet)
        return Response(serializer.data)
    
    elif request.method == 'PUT':
        serializer = SnippetSerializer(snippet, data=request.data)

        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    
    elif request.method == 'DELETE':
        snippet.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

4. urls.py

# urls.py

from django.urls                import path
from snippets                   import views

urlpatterns = [
    path('snippets/', views.snippet_list),
    path('snippets/<int:pk>', views.snippet_detail)
]

이제!!! 이 선생님들을 이해할 수 있는 아주 미약한 준비(만)가 된 것 같다

APIView

mixins & genericAPIView

ViewSet


이거 디버그로 찍어 봐야 될 것 같은데 어떻게 찍어보지???

profile
킴릴로

0개의 댓글