Django REST FRAMEWORK Tutorial 10 -- def snippet_list を Class SnippetList に書き直す
15563 단어 django
何が変わるのか
https://www.django-rest-framework.org/tutorial/3-class-based-views/
@api_view(['GET', 'POST'])
def snippet_list(request, format=None):
if request.method == 'GET':
elif request.method == 'POST':
@api_view
の後に def で snippet_list で関数を作ってrequest.method によって if で分岐して処理していた.
class SnippetList(APIView):
def get(self, request, format=None):
def post(self, request, format=None):
これを SnippetList 그렇다고 하는 class を作って
얻다, 게시하다
こうすることで、全體を指すものはクラス、各自メソddを指すものは関数
と分ける ことができるのでコードが見やすくなると推測する.
mat,get_object を関数にして各mesoddから呼び出すようにすることで
コードの可読性が良くなると推測する.
SnippetList のコードを書いていく
api_view の書き換えと Class SnippetList の全體像
from rest_framework.decorators import api_view
今まで関数の前に使っていた api_view에서
from rest_framework.views import APIView
クラスの引数として用いる APIView に変更
class SnippetList(APIView):
def get(self, request, format=None):
def post(self, request, format=None):
こうして class 와 def で書き直す.
中身はのロジックは以前 if で分岐していた時と全く同じ.
snippet_detail を書き直す
こちらは新たに作成される get_object が依然to 大きく異なる.
全體構成
class SnippetDetail(APIView):
def get_object(self, pk):
def get(self, request, pk, format=None):
def put(self, request, pk, format=None):
def delete(self, request, pk, format=None):
このように、SnippetDetail クラスの中に
関数を作っいく.
get_object 사용
以前は def snippet_detail 直下で
try:
snippet = Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
最初に try で snippet 変数に取ってきておいて
if request.method == 'GET':
serializer = SnippetSerializer(snippet)
return Response(serializer.data)
各mesoddでは、その を使うようにしていた.
これを今回は
def get_object(self, pk):
try:
return Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
raise Http404
오브제크트を取ってくる一つの関数 get_object に切り出して
def get(self, request, pk, format=None):
snippet = self.get_object(pk)
serializer = SnippetSerializer(snippet)
return Response(serializer.data)
各メソdd関数で self 에서 self.get_object として 使用する.
JavaScript の this のようなものだと解釈する.
get_object を実際に書く
from django.http import Http404
Http404 を使うので import し
def get_object(self, pk):
try:
return Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
raise Http404
get_object では pk に応じてOBJECT を取得し
なければ Http404 を返す.
別の関数に切り出し Http404 を使う以外は前回と変更点はない.
가져오기, 넣기, 삭제
def get(self, request, pk, format=None):
snippet = self.get_object(pk)
serializer = SnippetSerializer(snippet)
return Response(serializer.data)
def put(self, request, pk, format=None):
snippet = self.get_object(pk)
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)
def delete(self, request, pk, format=None):
snippet = self.get_object(pk)
snippet.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
全てのメソdd関数で self 로부터 get_object を使って
現在のprimary key のobjektoを取ってくるようにする.
urls に クラス名を適用して .as_view() もつける.
snippets/urls.py を見ると
urlpatterns = [
path('snippets/', views.snippet_list),
path('snippets/<int:pk>/', views.snippet_detail),
]
以前は 조회수. snippet_list になっていたが
class 와 APIView を使うとこれでは読み込めない.
path('snippets/', views.SnippetList.as_view()),
path('snippets/<int:pk>/', views.SnippetDetail.as_view()),
견해.の後に SnippetList, SnippetDetail 와
CamelCase に直したクラス名を記述して
.as_view() をつける.
これでクラスベースで読み込まれるようになった.
Reference
이 문제에 관하여(Django REST FRAMEWORK Tutorial 10 -- def snippet_list を Class SnippetList に書き直す), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/kaede_io/django-rest-framework-tutorial-10-def-snippetlist-wo-class-snippetlist-nishu-kizhi-su-33cp
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from rest_framework.decorators import api_view
from rest_framework.views import APIView
class SnippetList(APIView):
def get(self, request, format=None):
def post(self, request, format=None):
こちらは新たに作成される get_object が依然to 大きく異なる.
全體構成
class SnippetDetail(APIView):
def get_object(self, pk):
def get(self, request, pk, format=None):
def put(self, request, pk, format=None):
def delete(self, request, pk, format=None):
このように、SnippetDetail クラスの中に
関数を作っいく.
get_object 사용
以前は def snippet_detail 直下で
try:
snippet = Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
最初に try で snippet 変数に取ってきておいて
if request.method == 'GET':
serializer = SnippetSerializer(snippet)
return Response(serializer.data)
各mesoddでは、その を使うようにしていた.
これを今回は
def get_object(self, pk):
try:
return Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
raise Http404
오브제크트を取ってくる一つの関数 get_object に切り出して
def get(self, request, pk, format=None):
snippet = self.get_object(pk)
serializer = SnippetSerializer(snippet)
return Response(serializer.data)
各メソdd関数で self 에서 self.get_object として 使用する.
JavaScript の this のようなものだと解釈する.
get_object を実際に書く
from django.http import Http404
Http404 を使うので import し
def get_object(self, pk):
try:
return Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
raise Http404
get_object では pk に応じてOBJECT を取得し
なければ Http404 を返す.
別の関数に切り出し Http404 を使う以外は前回と変更点はない.
가져오기, 넣기, 삭제
def get(self, request, pk, format=None):
snippet = self.get_object(pk)
serializer = SnippetSerializer(snippet)
return Response(serializer.data)
def put(self, request, pk, format=None):
snippet = self.get_object(pk)
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)
def delete(self, request, pk, format=None):
snippet = self.get_object(pk)
snippet.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
全てのメソdd関数で self 로부터 get_object を使って
現在のprimary key のobjektoを取ってくるようにする.
urls に クラス名を適用して .as_view() もつける.
snippets/urls.py を見ると
urlpatterns = [
path('snippets/', views.snippet_list),
path('snippets/<int:pk>/', views.snippet_detail),
]
以前は 조회수. snippet_list になっていたが
class 와 APIView を使うとこれでは読み込めない.
path('snippets/', views.SnippetList.as_view()),
path('snippets/<int:pk>/', views.SnippetDetail.as_view()),
견해.の後に SnippetList, SnippetDetail 와
CamelCase に直したクラス名を記述して
.as_view() をつける.
これでクラスベースで読み込まれるようになった.
Reference
이 문제에 관하여(Django REST FRAMEWORK Tutorial 10 -- def snippet_list を Class SnippetList に書き直す), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kaede_io/django-rest-framework-tutorial-10-def-snippetlist-wo-class-snippetlist-nishu-kizhi-su-33cp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)