ViewSet 클래스는 read 또는 update 같은 opertaions만 지원하고 get 또는 put 같은 메소드 핸들러를 지원하지 않는 점을 제외하고는 View와 거의 똑같다. ViewSet 클래스는 일반적으로 ViewSet이 view들의 세트 안으로 instantiated되지는 마지막 단계, 즉 Router 클래스가 복잡하게 정의된 URL 설정을 핸들링하기위해 사용되어지는 순간 메소드 핸들러의 세트를 bound 한다. from rest_framework import viewsets class UserViewSet(viewsets.ReadOnlyModelViewSet): """ This viewset automatically provides `list` and `detail` actions. """..
Creating an endpoint for the root of our API # views.py from rest_framework.decorators import api_view from rest_framework.response import Response from rest_framework.reverse import reverse @api_view(['GET']) def api_root(request, format=None): return Response({ 'users': reverse('user-list', request=request, format=format), 'snippets': reverse('snippet-list', request=request, format=format) }) ..
Adding information to our model from django.db import models from pygments.lexers import get_all_lexers, get_lexer_by_name from pygments.styles import get_all_styles from pygments.formatters.html import HtmlFormatter from pygments import highlight LEXERS = [item for item in get_all_lexers() if item[1]] LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS]) STYLE_CHOICES = sorted([..
Regular Django views from django.http import HttpResponse, JsonResponse from django.views.decorators.csrf import csrf_exempt from rest_framework.parsers import JSONParser from .models import Snippet from .serializers import SnippetSerializer @csrf_exempt def snippet_list(request): """ List all code snippets, or create a new snippet """ if request.method == 'GET': snippets = Snippet.objects.all()..
from rest_framework import serializers from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES class SnippetSerializer(serializers.Serializer): id = serializers.IntegerField(read_only=True) title = serializers.CharField(required=False, allow_blank=True, max_length=100) code = serializers.CharField(style={'base_template': 'textarea.html'}) linenos = serializers.BooleanField(required=..
$ pip install django-filter # settings.py REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ( 'django_filters.rest_framework.DjangoFilterBackend', 'rest_framework.filters.SearchFilter', 'rest_framework.filters.OrderingFilter', ), } DEFAULT_FILTER_BACKENDS rest_framework.filters.BaseFilterBackend: 필드 필터링 기능을 제공. 앞서 설치한 django-filter 패키지를 사용. 필터링할 수 있는 필드 세트를 지정하거나 좀 더 사용자 정의된 설정이 들어간 rest_framework.f..
인증체계? request.user: 사용자 모델 인스턴스. django.contrib.auth.User requet.auth: 인증 토큰과 같은 추가 인증 정보 Django Rest Framwork는 rest_framework.authentication 모듈에서 다음 세 가지 인증 클래스를 제공. 모두 BaseAuthentication 클래스의 서브 클래스. BasicAuthentication: 사용자 이름과 암호에 대한 HTTP 기본 인증을 제공한다. 제품으로 사용하는 경우에는 API가 HTTPS에서만 사용 가능해야 한다. SessionAuthentication: 인증을 위해 장고의 세션 프레임워크와 함께 작동 TokenAuthentication: 간단한 토큰 기반 인증을 제공. 요청에는 토큰의 접두어..
TIME_ZONE Default: 'America/Chicago' (나는 왜 'UTC'지?) USE_TZ이 False로 되어있으면, Django는 TIME_ZONE에 지정된 시간대로 시간을 저장. Windows 환경에서는 시스템 시간대와 맟쳐줘야 함. USE_TZ Defatul: False True로 설정되면 Django는 timezone-aware datetime을 사용 False이면 naive datetime을 사용 예) USE_TZ이 True이고 TIME_ZONE이 'UTC'이면 datetime이 UTC 시간대에 맞게 표현되고, 'Asia/Seoul'이면 한국 시간대에 맞게 표현됨. USE_TZ이 False이면 datetime이 TIME_ZONE에 설정된 시간대로 저장됨.
Django Rest Framework는 serialize를 위해 2단계 과정을 사용 serializer는 모델 인스턴스와 파이썬 primitive 사이의 중개자다. parser와 renderer는 파이썬 primitive와 HTTP 요청과 응답 사이의 중개자로 처리한다. rest_framework.serializers.Serializer 클래스의 서브 클래스를 생성해 직렬화와 역직렬화를 관리하기 위한 필드와 필요 메서드를 선언함으로써 모델 인스턴스와 파이썬 primitive 사이의 중개자를 구성할 것이다.
django.utils.timezone utc tzinfo instance that represents UTC make_aware(value, timezone=None, is_dst=None) Returns an aware datetime that represents the same point in time as value in timezone, value being a naive datetime. If timezone is set to None, it defaults to the current time zone. get_current_timezone() Returns a tzinfo instance that represents the current time zone. https://docs.django..