티스토리 뷰

이번에는 REST api를 만들어 볼까 합니다.

 

2020/09/06 - [Backend/Server] - Python. Making a web application with Django - 1

 

Python. Making a web application with Django - 1

일단 Django를 선택했습니다. 구글 트렌드에서 검색을 해본 결과 Flask 보다 사용도는 높은거 같아서요. 그리고 Python은 3을 선택했습니다. 일단은 설치하고 프로젝트를 생성하는것 까지만 다뤄보도

mrgamza.tistory.com

2020/09/06 - [Backend/Server] - Python. Making a web application with Django - 2

 

Python. Making a web application with Django - 2

이 글에서는 전에 세팅한 Django를 이용하여서 WebPage를 만들어 볼까 합니다. 그냥 간단한 Notice를 만드는 방법을 하여 봅시다. 이전 세팅하여 주는 부분을 보고 와주세요 2020/09/06 - [Backend/Server] - Pyt

mrgamza.tistory.com

일단 두개를 해보시고 오시는게 좋아요.

 

* 모든것은 virtual 환경에서 이루어집니다.

api app을 만들어봅시다.

$ python manage.py startapp api

Django REST framework를 설치합시다.

$ pip install djangorestframework

INSTALLED_APPS에 app 추가하기

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "rest_framework",
    "api",
]

 

Model 생성하기

from django.db import models


class Twitter(models.Model):
    content = models.TextField('내용', null=False)
    created_at = models.DateTimeField('날짜', auto_now_add=True)

Serializers 생성하기

이것이 무엇이냐면 Model을 그대로 json으로 변환하는 방법을 만들어주는것입니다.

많이들 사용하는 ModalSerializer를 사용하여 볼겁니다.

api/ 에 serializers.py 파일을 만들어 줍니다.

from rest_framework import serializers
from .models import Twitter


class TwitterSerializer(serializers.ModelSerializer):
    class Meta:
        model = Twitter
        fields = ['id', 'content', 'created_at']

TwitterList, TwitterId 추가하기

이것은 REST의 개념상 뒤에 id가 없는 get_list, post와 id가 존재하는 get, put, delete에 대해서 나열하여 주는 부분입니다.

from .models import Twitter
from .serializers import TwitterSerializer
from django.http import Http404
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status


class TwitterList(APIView):
    def get(self, request, format=None):
        twitters = Twitter.objects.all()
        serializer = TwitterSerializer(twitters, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = TwitterSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


class TwitterId(APIView):
    def get_object(self, id):
        try:
            return Twitter.objects.get(pk=id)
        except Twitter.DoesNotExist:
            raise Http404

    def get(self, request, id, format=None):
        twitter = self.get_object(id)
        serializer = TwitterSerializer(twitter)
        return Response(serializer.data)

    def put(self, request, id, format=None):
        twitter = self.get_object(id)
        serializer = TwitterSerializer(twitter, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request, id, format=None):
        twitter = self.get_object(id)
        twitter.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

urls.py에 매핑 추가하기

from django.contrib import admin
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from . import views
from api.views import TwitterList, TwitterId

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'', views.hello, name='index'),
    path(r'twitter/', TwitterList.as_view()),
    path(r'twitter/<int:id>/', TwitterId.as_view()),
]

urlpatterns = format_suffix_patterns(urlpatterns)

twitter로 들어오는 매핑에 대해서 처리할수 있도록 만들었어요.

Test

localhost:8000/test 의 url에 대해서 POST 하여준 다음에, GET, PUT, DELETE 를 하여 보면 될것 같네요.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함