🙆♀️
【Django】Pythonで作るRest API【18Error Handling】
【18Error Handling】
YouTube: https://youtu.be/IRmUT-Xm-lE
今回はエラー画面が気になる方向けに
「getPostById」のビューを使って
簡単なエラーハンドリングについて解説します。
例えば現状ですと、
「Post」の個別データを取得しようとして、
存在しない「id」をURLに設定しますと
エラー画面が表示されてしまいます。
このエラー画面が出ないように
「try」「except」を使用して、簡単なエラーハンドリングを実装します。
myapp/posts/views.py
from django.shortcuts import render
from django.http import HttpResponse
from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializer
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from django.shortcuts import get_object_or_404
# Create your views here.
def helloWorld(request):
# return HttpResponse('Hello World')
hello = 'hello'
return render(request, 'posts/index.html', {})
@api_view(['GET'])
def getAllPosts(request):
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data)
@api_view(['POST'])
def createPost(request):
data = request.data
user = request.user
post = Post.objects.create(
title = data['title'],
content = data['content'],
author = user
)
serializer = PostSerializer(post, many=False)
return Response(serializer.data)
@api_view(['GET'])
def getPostById(request, pk):
post = get_object_or_404(Post, id=pk)
try:
# post = Post.objects.get(id=pk)
serializer = PostSerializer(post, many=False)
return Response(serializer.data)
except:
return Response({"error": "Something went wrong..."}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
@api_view(['DELETE'])
def deletePost(request, pk):
post = Post.objects.get(id=pk)
post.delete()
return Response({'message': 'delete success'})
@api_view(['PUT'])
def updatePost(request, pk):
data = request.data
post = Post.objects.get(id=pk)
post.title = data['title']
post.content = data['content']
post.published = data['published']
post.save()
serializer = PostSerializer(post, many=False)
return Response(serializer.data)
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
Discussion