python manage.py startapp posts
후 settings.py에 등록
from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE,)
title = models.CharField(max_length=128)
body = models.TextField()
image = models.ImageField(upload_to='post/', default='default.png')
published_date = models.DateTimeField(default=timezone.now)
from rest_framework import serializers
from .models import *
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ('pk','title','body','image','published_date')
class PostCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ('title','body','image')
from rest_framework import permissions
class CustomReadOnly(permissions.BasePermission):
def has_permission(self, request, view):
if request.method == 'GET':
return True
return request.user.is_authenticated
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return obj.author == request.user
from rest_framework import viewsets
from .models import *
from .permissions import *
from .serializers import *
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
permission_classes = [CustomReadOnly]
def get_serializer_class(self):
if self.action == 'list' or 'retrieve':
return PostSerializer
return PostCreateSerializer
def perform_create(self, serializer):
serializer.save(author=self.request.user)
from django.urls import path
from rest_framework import routers
from .views import PostViewSet
router = routers.SimpleRouter()
router.register('posts', PostViewSet)
urlpatterns = router.urls
from requests_toolbelt import MultipartEncoder
import requests
endpoint = "http://127.0.0.1:8000/posts/"
mp_encoder = MultipartEncoder(
fields={
'title':'post test',
'body':'post test is it work?'
}
)
r = requests.post(
endpoint,
data=mp_encoder,
headers={'Content-Type': mp_encoder.content_type,'Authorization': 'Token <Token>'}
)