single/multi page application

- Page Reloads : url 이동 없이 주기마다 변화(설정 시)
Django Rest framework: django single page application 지원 패키지- data 전송 :
Json
Json
- post(server) → json(client) : Serialize
- post(server) ← json(client) : Deserialize
Serializer
json ↔ html
- rest_framework의
serializers.ModelSerializer가data로 변환
<ModelSerializer instance>.data: json 변환
# rest_example\utils\serializers.py
from rest_framework import serializers
from blog.models import Post, Category
class CategorySeializet(serializers.ModelSerializer):
class Meta:
model = Category
fields = ['name', 'slug']
class PostSeializet(serializers.ModelSerializer):
class Meta:
model = Post
fields = ['title', 'category', 'author', 'create_date', 'updated_date', 'content', 'uploaded_image', 'uploaded_file']
# fields = ['__all__']
# rest_example\views.py
from rest_framework.decorators import api_view
from blog.models import Post
from .utils.serializers import PostSeializet
from rest_framework.status import HTTP_200_OK, HTTP_404_NOT_FOUND, HTTP_400_BAD_REQUEST
# Create your views here.
@api_view(['GET'])
def helloAPI(request):
return Response('hello world rest reponse')
@api_view(['GET', 'POST'])
def blogAPI(request):
if request.method=='GET':
posts = Post.objects.all()
post_serializer = PostSeializer(posts, many=True) # Serialize
return Response(post_serializer.data, status=HTTP_200_OK)
else : # POST, json -> post로 변환
de_serializer = PostSeializer(data=request.data)
if de_serializer.is_valid():
de_serializer.save()
return Response(de_serializer.data, status=HTTP_201_CREATED)
return Response(de_serializer, status=HTTP_400_BAD_REQUEST)
@api_view(['GET', 'DELETE', 'PUT', 'PATCH'])
def postAPI(request, pk):
post = get_object_or_404(pk=pk)
# post = Post.objects.get(pk=pk)
if request.method=='GET':
post_serializet = PostSeializer(post) # Serialize
return Response(post_serializet.data, status=HTTP_200_OK)
elif request.method=='DELETE':
post.delete()
return Response('delete completed', status=HTTP_204_NO_CONTENT)
else :
seializer = PostSeializer(post, data=request.data)
if seializer.is_valid():
seializer.save()
return Response(seializer.data, status=HTTP_200_OK)
return Response(seializer.errors, status=HTTP_400_BAD_REQUEST)
...

Django Rest Framwork
decorator의 http response GET을 받아 사용
from rest_framework.response import Response
from rest_framework.decorators import api_view
# Create your views here.
@api_view(['GET'])
def helloAPI(request):
return Response('hello world rest reponse')

formtype='post': http request에 from data가 숨겨서 보내짐type='get': url에 붙어서 보여진 채로 보내짐- ex)
localhost/name='aaa' - url이 더러워지는 원인
- db 대신 사용하는 경우도…
- ex)


- 동일한 url에서 method 활용
/blog/create/(post) →/blog/(post, create method)
| http type | CRUD | 기능 | 예시 |
|---|---|---|---|
| GET | read | • 대부분 작업 | |
• http의 a 태그, url 접속 등 |
3번글 상세보기 | ||
| POST | create | • 포스트 작성 등 | |
• http의 <form type="post"> 등 |
3번글 삭제 | ||
| PUT | update(all) | Post를 수정했다면, 전체 항목을 다시 보내줌 | 3번글 수정 |
| PATCH | update(일부) | Post를 수정할 때 title=’수정된 제목’ 등과 같이 일부 항목만 보냄 | 댓글 수정 |
| DELETE | delete | 4번글 삭제 |
Rest Framework 관리 싸이트

C
Contents
