Django REST FRAMEWORK Tutorial 8 -- snippet_detail の GET/PUT/DELTE を csrf_exempt で作成する
9687 단어 django
何をやるのか
前々回の記事と前回の記事で、snippet_list の一覧の APIを CSRF_EXEMPT 와 API_VIEW で GET/POST できるようにした.
今回は snippet_detail の詳細の API を CSRF検証を無効化して作成する
snippets/urls に snippet_detail のruーtingingを追加
urlpatterns = [
path('snippets/', views.snippet_list),
path('snippets/<int:pk>/', views.snippet_detail),
]
snippets/1 や snippets/99 のパスにアクセスした時に見るところを
views の snippet_detail に設定する
스니펫/뷰 に snippet_detail を記載
@csrf_exempt
def snippet_detail(request, pk):
"""
Retrieve, update or delete a code snippet.
"""
try:
snippet = Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
return HttpResponse(status=404)
if request.method == 'GET':
serializer = SnippetSerializer(snippet)
return JsonResponse(serializer.data)
elif request.method == 'PUT':
data = JSONParser().parse(request)
serializer = SnippetSerializer(snippet, data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data)
return JsonResponse(serializer.errors, status=400)
elif request.method == 'DELETE':
snippet.delete()
return HttpResponse(status=204)
모델로부터의 오브제크트의 取り出し,
GET/PUT/DELETE 의 JSON 응답 처리
これらを書いている
一つ一つ見ていく
CSRF 検証無効化와 요청 및 pk
@csrf_exempt
def snippet_detail(request, pk):
最初に CSRF 検証無視を記載
요청 と pk を受け取る
기본 키, 츠마리 id
Snippet 모델로부터 오브제크트を取得、例外処理
try:
snippet = Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
return HttpResponse(status=404)
受け取った pk からデータを取り、変数 스니펫 に入れる
それがなくて失敗したら、404 を返す
가져 오기
if request.method == 'GET':
serializer = SnippetSerializer(snippet)
return JsonResponse(serializer.data)
GET の 時は普通にmodel에서 取り出した データタを
시리아라이즈라고 JSON 레스폰스로 설명
놓다
elif request.method == 'PUT':
data = JSONParser().parse(request)
serializer = SnippetSerializer(snippet, data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data)
return JsonResponse(serializer.errors, status=400)
PUT の時는 요청 の中身을 JSON 파서에 かけて
시리아라이자 にかけて, 中身があれば JSON 응답으로 返す.
삭제
elif request.method == 'DELETE':
snippet.delete()
return HttpResponse(status=204)
DELETE の時は単に取ってきたOBJECT에 .delete() をかけて
레스폰스노 404 を返している
POST는 없습니다.
snippet_detail では既にあるものにアクセスしてるからだ.
まとめ
snippet_detail 에서는
Snippet 모델로부터 渡された id(pk) のデータをとって
なかった場合は 404 を返して
GET の場合はシリアライズし て JSON で返す
PUT の場合は JSON 파서시て시리아라이즈に成功すれば保存
失敗すれば 400 에라를 返す
DELETE の場合は delete() をかけて 204 を返す
これで詳細ページの API が作れた
Reference
이 문제에 관하여(Django REST FRAMEWORK Tutorial 8 -- snippet_detail の GET/PUT/DELTE を csrf_exempt で作成する), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kaede_io/django-rest-framework-tutorial-8-snippetdetail-no-getputdelte-wo-csrfexempt-dezuo-cheng-suru-21pd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)