exclude안에 두 개의 조건을 넣고 코드를 잘 넣어줬는데도 조건이 먹히지 않는 경우가 발생했다. .exclude(id__in=OwnerPlace.objects.values_list('place'), categories__id=exclude_category.id) .exclude(Q(id__in=OwnerPlace.objects.values_list('place')) | Q(categories__id='a78312ef-865e-4e87-ae2c-d761131f4ae5')) exclude는 기본적으로 and 조건으로 여러 조건을 결합하기에, 두 개의 조건을 넣게 되면 두 조건을 만족하는 객체 만이 대상에서 제외 되기 때문에 앞의 현상이 발생했던 것이다. 그래서 밑의 코드와 같이 Q객체를 이용해 or 조..
전체 글
읽기 쉬운 코드를 짜기 위해 노력합니다. 좋은 코드는 단순하고 이해하기 쉬워야 한다고 생각합니다.Django의 class-base view는 old-style view에서 환영하는 만한 출발이다 - Reinout van Rees REST framework는 Django의 View의 subclass인 APIview class를 제공합니다. APIView class는 정규적인 View class와 아래와 다른 점이 있습니다: handler method에 전달된 Request은 Django의 HttpRequest 인스턴스가 아닌 REST frmaework에 요청된 인스턴스 입니다 Handler methods Django의 HttpResponse 대신 REST framework Response를 리턴합니다. view는 content를 negotitation하고 올바른 renderer response를 설정..
Responses 기본 HttpResponse와 달리 TemplateResponse 개체는 뷰에서 제공한 context를 계산합니다. 마지막 출력 까지 response는 필요하지 않다면 계산되지 않습니다 - Django documentation - REST framework는 클라이언트 요청에 따라 여러 콘텐츠 유형으로 랜더링 할 수 있게 HTTP content를 지원합니다. 그래서 다양한 content types로 랜더링 가능합니다. Response class는 Django의 SimpleTemplateResponse 의 subclass 입니다. Response objects는 native Python primitives로 데이터로 초기화 합니다. 그런 다음 REST framework는 표준 HTTP c..
REST 기반 웹 서비스 작업을 수행하는 경우 request.POST를 무시해야 합니다. — 말콤 트레디닉, 장고 개발자 그룹 .data request.data는 request body의 분석된 내용을 반환합니다. 이는 request.POST 및 request.FILES과 유사하지만 다음 부분을 제외하고 비슷합니다. 파일 및 비파일 입력을 포함하여 모든 구문 분석된 내용이 포함됩니다 POST 이외의 HTTP 메서드의 내용을 구문 분석할 수 있도록 지원하므로 PUT 및 PATCH 요청의 내용에 액세스 할 수 있습니다 form data만 지원하는 것이 아닌 REST framework의 유연한 요청 파싱을 지원합니다. 들어오는 form data를 처리하는 방식과 비슷하게 JSON 데이터 또한 처리할 수 있습니..
현재 우리는 API에 데이터를 편집하거나 삭제할 수 있는 사람에 대한 제한이 없습니다. 그래서 아래의 기능을 추가해서 보안을 강화하려고 합니다 코드는 항상 작성자와 연결됩니다 인증된 사용자만 스니펫을 생성할 수 있습니다 데이터 작성자만 데이터를 업데이트 하거나 삭제할 수 있습니다 인증되지 않은 요청에는 전체 읽기 전용 엑세스 권한이 있어야 합니다. 모델에 정보 추가 모델 클래스에 몇 가지 변경 사항을 적용하겠습니다. Snippet 모델에 두 필드를 추가합니다 snippets/models.py owner = models.ForeignKey('auth.User', related_name='snippets', on_delete=models.CASCADE) highlighted = models.TextField..
목표 이번 tutorial 3에서는 기존 작성했던 함수 형식의 class 기반의 view로 작성해서 더 가독성 있고 코드 길이를 줄이는 것을 배우는 것이 목표입니다. 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 Response from rest_framework import status class SnippetList(APIView): """ List all snippets, or create a new..
REST 프레임워크는 Request을 더욱 확장해서 사용합니다. request.POST, request.GET이 아닌 하나의 클래스에서 처리하기를 지향하기 때문에 request.data를 사용 할 수 있습니다. request.POST # Only handles form data. Only works for 'POST' method. request.data # Handles arbitrary data. Works for 'POST', 'PUT' and 'PATCH' methods. API 뷰 래핑 DRF에서 API를 보기 좋게 작성하기 위해 두 가지 방법을 사용합니다. 1. @API_view 함수 기반 뷰 작업을 위한 데코레이터 2. APIView 클래스 기반 뷰로 작업하기 위한 클래스 from rest_..
검색 기능을 구현 중에 db에 있는 값을 split from django.db.models import Func, CharField class StripWhitespace(Func): function = 'REGEXP_REPLACE' template = "%(function)s(%(expressions)s, '\\s', '', 'g')" output_field = CharField() proposals = proposals.annotate( stripped_name=StripWhitespace('name') ) proposals = proposals.filter(stripped_name__icontains=keyword) annotate시 만들어둔 클래스를 통해서 name을 쪼개 비교