Django REST FRAMEWORK Tutorial 11 -- SnippetList を Mixin を使って短く書き換える
메리트
https://www.django-rest-framework.org/tutorial/3-class-based-views/#using-mixins
Mixin を使うと短くかけるらしい.
def get(self, request, format=None):
snippets = Snippet.objects.all()
serializer = SnippetSerializer(snippets, many=True)
return Response(serializer.data)
def post(self, request, format=None):
serializer = SnippetSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
これが
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
2行ずつで書けるようになるらしい.正気か?
SnippetList を Generics 와 Mixins を使って書く
from rest_framework import mixins
from rest_framework import generics
믹스인, 제네릭, (을) 가져오기
class SnippetList(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
APIView の代わり에
ListModelMixin, CreateModelMixin, GenericAPIView,
これらを使い
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
스니펫 のOBJECTO全てを queryset 変数に入れて
Snippet の시리아라이저를 serializer_class 変数に入れる
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
get でも 포스트 でも *args, **kwargs を使うことによって
queryset 과 serializer_class を使えるようになると推測する.
get の場合は self.list 에
Snippets 오브제크트を시리아라이즈시て全て返す
메솜드가 입으세요
포스트 の場合は self.create に
request の中のデータをシリアライズして
Era-handringして結果を返す
메솜드가 입으세요
と推測する.
動作確認しても、問題なく以前と同じように動いた.
SnippetDetail で Generics と Mixin を使う
class SnippetDetail(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
SnippetDetail でも同じように Mixin 와 Generics のモジュール?を引数にとる.
今回は Mixin では Retrieve, Update, Destory, を使う
get が list ではなく、retrieve になっている.
こちらも問題なく動作確認できた.
詳細での取得も上書きも削除も、恐ろしいほど簡単にかけた.
Generics を使って .list, .create や .retreive, .update, .destroy, をまとめる
さらに簡単に書く方法がある.
Mixin すら使わず、Mixin で使っていた相当のmesodを最初に Generics でまとめてしまう方法だ.
class SnippetList(generics.ListCreateAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
generics.ListCreateAPIView 에서 List, Create
generics.RetrieveUpdateDestroyAPIView
で 검색, 업데이트, 파괴,
をモジュールから持ってきてしまえると推測する.
こちらも問題なく動作確認ができた.
まとめ
오브제크트を取得して
シリアライザにかけて、保存や削除をして〜
と書いていたこード(을)를
class SnippetList(mixins.ListModelMixin,
generics.GenericAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
List, Create 등의 Mixin 과 Generics を使うことで
return する箇所に self.list() と書くだけで実装できた.
class SnippetList(generics.ListCreateAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
また、Generics を使い、最初に Mixin の各mesoddを明記することで
return すら書かずに簡略化して書くことが可能だった.
Reference
이 문제에 관하여(Django REST FRAMEWORK Tutorial 11 -- SnippetList を Mixin を使って短く書き換える), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kaede_io/django-rest-framework-tutorial-11-snippetlist-wo-mixin-woshi-tuteduan-kushu-kihuan-eru-1ilb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)