DRF 설치 및 설정
pip install djangorestframework
settings.py
INSTALLED_APPS = [
...
'rest_framework',
...
]
→ freeze !
일단 사용해보기
articles/urls.py
from django.urls import path
from . import views
app_name = "articles"
urlpatterns = [
path("html/", views.article_list_html, name="article_list_html"),
path("json-01/", views.json_01, name="json_01"),
path("json-02/", views.json_02, name="json_02"),
path("json-drf/", views.json_drf, name="json_drf"),
]
serializers.py (생성)
from rest_framework import serializers
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = "__all__"
views.py
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import ArticleSerializer
@api_view(["GET"])
def json_drf(request):
articles = Article.objects.all()
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data)
API는 소프트웨어끼리 소통하는 방법
⇒ 직접 파이썬 프로그램을 만들어서 콜해보기
import requests
url = "http://127.0.0.1:8000/api/v1/articles/json-drf"
response = requests.get(url)
print(response)
print(response.json())
Postman: 개발자가 API를 디자인, 테스트, 문서화, 공유를 할 수 있도록 도와주는 소프트웨어.
-> API 테스트, 환경 관리, 협업 등을 위한 기능을 제공하여 보다 효율적으로 API를 개발하고 테스트 할 수 있게 도와줌.
0. 가입 후 데스크톱 앱 설치
1. My workspace
2. 새로운 collection을 생성
3. request를 생성하고 정의
4. 보낼 주소를 입력하고 보내기
- 이렇게 하나하나의 API를 작성하고 테스트하면서 개발
- Workspace를 팀원끼리 공유하여 협업이 가능
⇒ 최대 3명까지 무료로 이용가능하고, 그 이상은 유료
-----------------------------------------------------------------------------------------------------------------------------
만들었던 py파일과 template폴더 지우고
urls.py
# namespace나 별명 참조하는것 등 다 없어도 됨.
from django.urls import path
from . import views
app_name = "articles"
urlpatterns = [
path("", views.article_list, name="article_list"),
path("<int:pk>/", views.article_detail, name="article_detail"),
]
serializers.py(생성)
from rest_framework import serializers
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = "__all__"
models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=120)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
views.py
from rest_framework.decorators import api_view # 함수형 api작성시 필요
from rest_framework.response import Response
from rest_framework import status # response 상태들
from .models import Article
from .serializers import ArticleSerializer
from django.shortcuts import get_object_or_404
@api_view(["GET", "POST"])
def article_list(request):
if request.method == "GET":
articles = Article.objects.all()
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data)
elif request.method == "POST":
serializer = ArticleSerializer(data=request.data)
if serializer.is_valid(raise_exception=True): # return Response(serializer.errors, status=400)을 대신함
serializer.save()
# 201은 created
return Response(serializer.data, status=status.HTTP_201_CREATED)
@api_view(["GET", "PUT", "DELETE"])
def article_detail(request, pk):
if request.method == "GET":
article = get_object_or_404(Article, pk=pk)
serializer = ArticleSerializer(article)
return Response(serializer.data)
elif request.method == "PUT":
article = get_object_or_404(Article, pk=pk)
# 앞에 article을 넣어야 instance처럼 동작
serializer = ArticleSerializer(article, data=request.data, partial=True) # partial은 부분 필드만 고치고 싶을때
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(serializer.data)
elif request.method == "DELETE":
article = get_object_or_404(Article, pk=pk)
article.delete()
return Response(status=status.HTTP_204_NO_CONTENT) # 204는 삭제
'Django' 카테고리의 다른 글
Relationship과 DRF(with. particular seed) (0) | 2024.08.29 |
---|---|
DRF CBV (0) | 2024.08.29 |
Django Seed(Response와 Serializer) (0) | 2024.08.29 |
장고 TemplateSyntaxError (0) | 2024.08.28 |
백엔드와 Django DRF, RESTful API (0) | 2024.08.23 |