Django REST FRAMEWORK Tutorial 9 -- snippet_detail の GET/PUT/DELTE を APIView で作成する
14909 단어 django
Django REST 프레임워크 の snippet_detail を
@csrf_exempt
def snippet_detail(request, pk):
CSRF の検出除外에서
@api_view(['GET', 'PUT', 'DELETE'])
def snippet_detail(request, pk):
API 보기 に書き直す.
これによって DjangoRestFramework の管理画面がBlauzaで使える.
from django.http import HttpResponse
HttpResponse を使ったのを
from rest_framework.response import Response
REST 프레임워크 の Response に変更
try:
snippet = Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
return HttpResponse(status=404)
이, HttpResponse を
return Response(status=status.HTTP_404_NOT_FOUND)
Response にして、
status.HTTP_404_NOT_FOUND
を返すようにする前回の記事で削除した snippets/2 をブラウザで見ると
ちゃんと 404 で DRF の管理画面で表示されている.
しかし、api_view を入れずに csrf_exempt のままだと
"GET /snippets/2/ HTTP/1.1" 500 59081
404 에서 500 が返っ て き て し ま う.
404 は想定されるエラーで、500 はちゃんと想定で きていない、Systemの作りが甘い시계に出るエラーなんだなぁ말하는 것과 が理解できた
가져 오기
if request.method == 'GET':
serializer = SnippetSerializer(snippet)
return Response(serializer.data)
GET の Json레스폰스모 레스폰스에 하는 일로
DRF の管理画面で綺麗に見れる.
넣기, 삭제
elif request.method == 'PUT':
serializer = SnippetSerializer(snippet, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif request.method == 'DELETE':
snippet.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
PUT 와 DELETE も snippet_list の時のように
DRF 의 응답 및 HTTP 스테이터스를 사용하기 위한 문서입니다.
こちらの方が 204 がなんだっけって考えずに済むので可読性が高い.
PUT 와 DELETE は, この詳細画面でボtanから行える.
snippet_detail 전 체
@api_view(['GET', 'PUT', 'DELETE',])
def snippet_detail(request, pk):
"""
Retrieve, update or delete a code snippet.
"""
try:
snippet = Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
serializer = SnippetSerializer(snippet)
return Response(serializer.data)
elif request.method == 'PUT':
serializer = SnippetSerializer(snippet, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif request.method == 'DELETE':
snippet.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
format=없음 をつける
https://www.django-rest-framework.org/tutorial/2-requests-and-responses/#adding-optional-format-suffixes-to-our-urls
format=None をつけると .json などの format 接尾辞をつけてrichestをできるらしい
def snippet_list(request):
def snippet_detail(request, pk):
snippet_list, snippet_detail, の引数に
def snippet_list(request, format=None):
def snippet_detail(request, pk, format=None):
format=없음 をつけて
스니펫/urls.py 에
from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = format_suffix_patterns(urlpatterns)
urlpatterns を format_suffix_patterns をかける
すると、拡張子に応じて DRF の管理画面と json のみを返すものと切り替えられる.
まとめ
from rest_framework.decorators import api_view
@api_view(['GET', 'PUT', 'DELETE'])
rest_framework の api_view 에서
snippet_detail など各関数(endpoint?) で 使う HTTP 메소드를 記述して
from rest_framework import status
from rest_framework.response import Response
return Response(serializer.data, status=status.HTTP_201_CREATED)
rest_framework 의 상태, 응답 으로
このように
status.HTTP_201_CREATED
, status.HTTP_204_NO_CONTENT
, status.HTTP_400_BAD_REQUEST
, status.HTTP_404_NOT_FOUND
, これらを使うようにする.
Reference
이 문제에 관하여(Django REST FRAMEWORK Tutorial 9 -- snippet_detail の GET/PUT/DELTE を APIView で作成する), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kaede_io/django-rest-framework-tutorial-8-snippetdetail-no-getputdelte-wo-apiview-dezuo-cheng-suru-29ge텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)