분류 전체보기 49

DRF Tutorial 4: Authentication & Permissions 3

object 수준의 권한 모든 스니펫을 누구나 볼 수 있도록 하되, 스니펫을 만든 사용자만 업데이트하거나 삭제할 수 있도록 하고 싶다면 이를 위해서는 사용자 지정 권한을 만들어야 한다. snippets 앱에서 permissions.py라는 새 파일을 만들자. from rest_framework import permissions class IsOwnerOrReadOnly(permissions.BasePermission): """ Custom permission to only allow owners of an object to edit it. """ def has_object_permission(self, request, view, obj): # Read permissions are allowed to an..

DRF Tutorial 2023.02.15

DRF Tutorial 4: Authentication & Permissions 2

스니펫을 유저와 연결하기 현재는 스니펫을 만들면 스니펫을 만든 유저를 스니펫 인스턴스와 연결할 수 있는 방법이 없다. 유저는 serialize된 값으로 전송되지 않고 들어온 요청(request)의 속성으로만 전송되기 때문이다. 이를 처리하기 위해 스니펫 view에서 .perform_create() 메서드를 재정의하여 인스턴스 저장이 관리되는 방식을 수정하고 수신 요청 또는 요청된 URL에 있는 모든 암묵적 정보를 처리할 수 있도록 하자. SnippetList 뷰 클래스에서 다음 메서드를 추가한다. # snippets/views.py class SnippetList(generics.ListCreateAPIView): queryset = Snippet.objects.all() serializer_class ..

DRF Tutorial 2023.02.15

DRF Tutorial 4: Authentication & Permissions 1

현재의 API에는 스니펫을 편집하거나 삭제할 수 있는 사용자에 대한 제한이 없다. 이를 확실히 하기 위해 몇 가지 고급 동작을 추가하자. 스니펫은 항상 작성자와 연결됨 인증된 사용자만 스니펫을 만들 수 있음 스니펫 작성자만 스니펫을 업데이트하거나 삭제할 수 있음 인증되지 않은 요청은 전체 읽기 전용 액세스 권한을 가짐 모델에 정보 추가하기 스니펫 모델 클래스를 몇 가지 변경하자. 먼저 몇 개의 필드를 추가한다. 그 중 하나는스니펫을 만든 사용자를 나타내는 데 사용된다. 다른 필드는 코드의 강조 표시된 HTML 표현을 저장하는 데 사용된다. models.py의 스니펫 모델에 다음 두 필드를 추가 # snippets/models.py owner = models.ForeignKey('auth.User', re..

DRF Tutorial 2023.02.15

DRF Tutorial 3: Class-based Views

함수 기반 뷰가 아닌 클래스 기반 뷰를 사용하여 API 뷰를 작성할 수도 있다. 이는 공통 기능을 재사용할 수 있고 코드를 깔끔하게 유지하는 데 도움이 되는 강력한 패턴이다. 클래스 기반 뷰를 사용하여 API 다시 작성하기 루트 뷰를 클래스 기반 뷰로 다시 작성하자. views.py를 약간 리팩터링 할 것이다. # snippets/views.py from snippets.models import Snippet from snippets.serializers import SnippetSerializer from django.http import Http404 from rest_framework.views import APIView from rest_framework.response import Respons..

DRF Tutorial 2023.02.14

DRF Tutorial 2: Requests and Responses 2

URL에 선택적 형식 접미사(optional format suffixes) 추가하기 응답이 더 이상 단일 콘텐츠 유형에 고정되어 있지 않다는 것을 활용하기 위해 API 엔드포인트에 형식 접미사 지원을 추가해 보자. 형식 접미사를 사용하면 특정 형식을 명시적으로 참조하는 URL이 제공되므로 API가 http://example.com/api/items/4.json 같은 URL을 처리할 수 있다. 다음과 같이 두 뷰에 형식 키워드 인수를 추가하자. def snippet_list(request, format=None): def snippet_detail(request, pk, format=None): 이제 snippets/urls.py 파일을 업데이트하여 기존 URL에 format_suffix_patterns ..

DRF Tutorial 2023.02.14

DRF Tutorial 2: Requests and Responses 1

이제부터 REST 프레임워크의 핵심을 본격적으로 다루기 시작하겠다. 몇 가지 필수 구성 요소를 소개한다. Request objects REST 프레임워크는 일반 HttpRequest를 확장하고 보다 유연한 요청 구문 분석을 제공하는 Request 객체를 도입했다. Request objects의 핵심 기능은 request.data 속성으로, request.POST와 유사하지만 웹 API 작업에 더 유용하다. request.POST # Only handles form data. Only works for 'POST' method. request.data # Handles arbitrary data. Works for 'POST', 'PUT' and 'PATCH' methods. Response objects..

DRF Tutorial 2023.02.14

DRF Tutorial 1: Serialization 3

시리얼라이저를 사용하여 일반 장고 뷰 작성하기 새로운 Serializer 클래스를 사용하여 몇 가지 API 뷰를 작성하는 방법을 살펴보자. 지금은 REST 프레임워크의 다른 기능을 사용하지 않고 일반 Django 뷰로 view를 작성할 것이다. snippets/views.py 파일에 다음 코드를 작성한다 from django.http import HttpResponse, JsonResponse from django.views.decorators.csrf import csrf_exempt from rest_framework.parsers import JSONParser from snippets.models import Snippet from snippets.serializers import SnippetS..

DRF Tutorial 2023.02.14

DRF Tutorial 1: Serialization 2

시리얼라이저로 작업하기 시리얼라이저와 친숙해지기 위해 Django 셸을 열어서 작업해보자. python manage.py shell 작업할 코드 스니펫을 몇 가지 만들어보자. from snippets.models import Snippet from snippets.serializers import SnippetSerializer from rest_framework.renderers import JSONRenderer from rest_framework.parsers import JSONParser snippet = Snippet(code='foo = "bar"\n') snippet.save() snippet = Snippet(code='print("hello, world")\n') snippet.save..

DRF Tutorial 2023.02.14

DRF Tutorial 1: Serialization 1

Django REST framework 문서의 튜토리얼을 따라하면서(번역하면서) DRF에 관한 내용들을 적을 예정 가상환경 세팅 새로운 프로젝트를 시작하기 전 새 가상환경을 만드는 것으로 시작한다. 이것은 작업 중인 다른 프로젝트와 잘 분리시키기 위함이다. python3 -m venv env source env/bin/activate 위의 코드로 가상환경을 생성하고 가상환경 안으로 진입하였다. 그 후 필요한 패키지들을 설치한다. pip install django pip install djangorestframework pip install pygments # We'll be using this for the code highlighting 프로젝트의 시작 작업할 프로젝트를 만들어준다. 프로젝트의 이름은 ..

DRF Tutorial 2023.02.13