Why? standalone script를 실행하고자 하는 경우, DB에 어떤 내용을 넣고 싶은 경우, 기타 등등 작업이 필요한 경우 custom command를 만들어 사용하면 유용. How? 해당 app 디렉토리에 app/management/commands/command_name.py 형식으로 파이썬 파일 생성. 파일 이름이 command 이름이 됨. from django.core.management.base import BaseCommand, CommandError class Command(BaseCommand): help = 'Help message' def add_arguments(self, parser): # CLI 창에서 받을 argument 정의 parser.add_argumnet('arg..

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 구동 시 원하는 코드를 실행하고 싶을 때 # apps.py from django.apps import AppConfig class LotteryConfig(AppConfig): name = 'lottery' def ready(self): # your code 위의 ready() 메소드에 구동 시 실행되기 원하는 코드를 작성하면 됨. 문제점 코드에 queryset이 들어 있고 현재 DB에 아직 해당 queryset에 해당하는 Table이 생성되어 있지 않으면 에러 발생 예) manage.py migrate 같은 초기화 작업 시 현재 Table이 생성되어 있지 않은 상태이므로 에러가 발생(먼저 app이 register되고 다음에 DB 생성하는 순서로 진행되는거 같음) 어떻게 해결하지??? htt..