[Django REST API] Program

[REST API Program model]

models.py -> admin.py -> serializer.py(data<->json) -> views.py -> urls.py

models.py

class Board(models.Model):

    title               = models.CharField(max_length=500)

    description         = models.TextField(blank=True, null=True)


    content             = RichTextUploadingField(blank=True, null=True)

    

    view_count          = models.IntegerField(default=0, blank=True)

    display_order       = models.IntegerField(default=0, blank=True, null=True)


    open                = models.IntegerField(choices=codes.YESNO, default=0)

    popup               = models.IntegerField(choices=codes.YESNO, default=0)


    status              = models.IntegerField(choices=codes.STATUS, default=1)

    creator             = models.ForeignKey(User, on_delete=models.PROTECT, related_name='board_creator', null=True, blank=True)      

    modifier            = models.ForeignKey(User, on_delete=models.PROTECT, related_name='board_modifier', null=True, blank=True)       

    created             = models.DateTimeField(default=timezone.now)

    modified            = models.DateTimeField(default=timezone.now)

    

    def __str__(self):

        return self.title


    def save(self, *args, **kwargs):

        ''' On save, update timestamps '''

        user = get_current_user()


        if not self.id:

            self.created = timezone.now()

            try:

                self.creator = user

            except:

                self.creator = self.creator

        self.modified = timezone.now()

        try:

            self.modifier = user

        except:

            self.modifier = self.modifier

        return super(Board, self).save(*args, **kwargs)



admin.py

class BoardAdmin(admin.ModelAdmin):

    list_display = ('id', 'title', 'display_order', 'open', 'popup', 'status')

    readonly_fields = ('creator', 'modifier', 'created', 'modified')

    list_filter = ['status', 'open', 'popup']

    list_display_links = ['title']

    list_per_page = 10


admin.site.register(models.Board, BoardAdmin)


serializers.py

from django.contrib.auth.models import User, Group
from rest_framework import serializers
from drf_writable_nested.serializers import WritableNestedModelSerializer
from django.contrib.auth import authenticate
from . import models

import logging
logger = logging.getLogger('api')

from django.conf import settings
from rest_framework import pagination
from rest_framework.response import Response

class BoardSerializer(serializers.ModelSerializer):

    class Meta:

        model = models.Board

        fields = '__all__'


views.py


from django.shortcuts import render, get_object_or_404
from django.contrib.auth.models import User, Group

from rest_framework import viewsets, status, serializers
from rest_framework import serializers as drf_serializers
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authentication, permissions, filters
from rest_framework.decorators import action
from rest_framework.parsers import JSONParser
from rest_framework.renderers import JSONRenderer
from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.authtoken.models import Token
from rest_framework.authentication import TokenAuthentication, SessionAuthentication, BasicAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.settings import api_settings

from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from django.views import View
from django.views.generic import DetailView, ListView, TemplateView
from django.http import Http404
from django_filters.rest_framework import DjangoFilterBackend, FilterSet
import django_filters
from django.http import HttpResponse, JsonResponse
from django.utils import timezone
from django.db.models import Q, Max, Min, Count

import json
import requests
import datetime
import time
import re
from random import randint
from decimal import Decimal

from . import serializers, models, utils, sat_ai
from aipass import tasks

import logging
logger = logging.getLogger('api')


class BoardViewSet(viewsets.ModelViewSet):


    authentication_classes = [TokenAuthentication]

    permission_classes = [IsAuthenticated]

    renderer_classes = [JSONRenderer]


    queryset = models.Board.objects.all()

    serializer_class = serializers.BoardSerializer

    filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]

    filterset_fields = '__all__'

    search_fields = ['title']

    ordering_fields = '__all__'

    ordering = ['created']


urls.py

from rest_framework import routers


router = routers.DefaultRouter()


router.register(r'boards', views.BoardViewSet, basename='board')


urlpatterns = [

    path('', include(router.urls)),

]


댓글

이 블로그의 인기 게시물

[Django Install] 9.1 sc제일은행 nginx-django 연결

[Django APP] django-widget-tweaks

[Django App] django-user-agents