django-rest-frameworkのserializerってどう呼ばれてるんだろう
目的
-
前に書いたやつ でserializerの中身は読んだ
- でもこのserializerってどこでどう呼ばれてるんだろう
環境
- 前のと同じ
- Serializerの使い方とかは参考記事を参照
結論
-
mixins.py
で呼ばれてた
-
create
とupdate
のそれぞれで
class CreateModelMixin(object):
"""
Create a model instance.
"""
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
class UpdateModelMixin(object):
"""
Update a model instance.
"""
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
-
get_serializer
してis_valid
してperform_hogehoge
するっていう流れらしい
-
perform_hogehoge
ではserializer.save()
してる
応用
- POSTとかPUTでAPIを呼ばれた時の挙動を帰るときはviewの
create
メソッドとかupdate
メソッドを上書きしてやればよさげ
- DBにデータ書き込みはしないけどPOSTでAPIを提供したいときは↓みたいな感じ?
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
# ここでserializer.validated_dataを使って何らかの処理をする
return Response({'result': 'data'}, status=status.HTTP_200_OK)
参考
- 前のと同じ
- Serializerの使い方とかは参考記事を参照
結論
-
mixins.py
で呼ばれてた
-
create
とupdate
のそれぞれで
class CreateModelMixin(object):
"""
Create a model instance.
"""
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
class UpdateModelMixin(object):
"""
Update a model instance.
"""
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
-
get_serializer
してis_valid
してperform_hogehoge
するっていう流れらしい
-
perform_hogehoge
ではserializer.save()
してる
応用
- POSTとかPUTでAPIを呼ばれた時の挙動を帰るときはviewの
create
メソッドとかupdate
メソッドを上書きしてやればよさげ
- DBにデータ書き込みはしないけどPOSTでAPIを提供したいときは↓みたいな感じ?
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
# ここでserializer.validated_dataを使って何らかの処理をする
return Response({'result': 'data'}, status=status.HTTP_200_OK)
参考
mixins.py
で呼ばれてた
-
create
とupdate
のそれぞれで
class CreateModelMixin(object):
"""
Create a model instance.
"""
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
class UpdateModelMixin(object):
"""
Update a model instance.
"""
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
get_serializer
してis_valid
してperform_hogehoge
するっていう流れらしい
-
perform_hogehoge
ではserializer.save()
してる
- POSTとかPUTでAPIを呼ばれた時の挙動を帰るときはviewの
create
メソッドとかupdate
メソッドを上書きしてやればよさげ - DBにデータ書き込みはしないけどPOSTでAPIを提供したいときは↓みたいな感じ?
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
# ここでserializer.validated_dataを使って何らかの処理をする
return Response({'result': 'data'}, status=status.HTTP_200_OK)
参考
Author And Source
この問題について(django-rest-frameworkのserializerってどう呼ばれてるんだろう), 我々は、より多くの情報をここで見つけました https://qiita.com/kiri__n/items/659538deebe093372c9a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .