티스토리 뷰
이번에는 REST api를 만들어 볼까 합니다.
2020/09/06 - [Backend/Server] - Python. Making a web application with Django - 1
2020/09/06 - [Backend/Server] - Python. Making a web application with Django - 2
일단 두개를 해보시고 오시는게 좋아요.
* 모든것은 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
TAG
- docker
- Java
- enum
- github
- Xcode
- ubuntu
- Spring
- Kotlin
- golang
- cocoapods
- android
- Python
- git
- tomcat
- nodejs
- php
- Gradle
- ios
- Windows
- centos8
- Codable
- windows10
- Linux
- war
- MySQL
- CentOS
- rxswift
- intellij
- SWIFT
- go
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함