python - What's the difference between .post() , .create() and perform_create() in views.py and .create() in serializers.py -
i'm confused .post() , .create() , perform_create() in views.py , .create() in serializers.py
seems .create() in serializers.py validated_data, can not check serializer.is_valid
here serializers.py:
class postlistserializer(modelserializer): class meta: model = post fields = [ 'title', 'content', 'publish', ] def create(self, validated_data): print("-------------------") print("5555555 - create", validated_data) return post.objects.create(**validated_data) and if code :
views.py
class testpostlistapiview(listcreateapiview): queryset = post.objects.all() serializer_class = postlistserializer def post(self, request, *args, **kwargs): serializer = postlistserializer(data=request.data) if not serializer.is_valid(raise_exception=false): # deal serializer.errors return response({'[post]custome error 1 !!!!!!!!!'}, status=status.http_400_bad_request) else: print("[post]- serializer.validated_data ", serializer.validated_data) serializer.save() return response({'[post]create success'}, status=status.http_201_created) the process go .post() in views.py --> .create() in serializers.py --> response client
if views.py use:
class testpostlistapiview(listcreateapiview): queryset = post.objects.all() serializer_class = postlistserializer # def post(self, request, *args, **kwargs): # serializer = postlistserializer(data=request.data) # if not serializer.is_valid(raise_exception=false): # # deal serializer.errors # return response({'[post]custome error 1 !!!!!!!!!'}, status=status.http_400_bad_request) # else: # print("[post]- serializer.validated_data ", serializer.validated_data) # serializer.save() # return response({'[post]create success'}, status=status.http_201_created) def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) print("44444-1 perform_create ", serializer) if not serializer.is_valid(raise_exception=false): print("44444-3 serializer.is_valid() ", serializer.is_valid()) return response({'custome error!!!!!!!!!'}, status=status.http_400_bad_request) else: print("44444-7 serializer.validated_data ", serializer.validated_data) self.perform_create(serializer) return response({ 'create success'}, status=status.http_201_created) def perform_create(self, serializer): print("1111-1 perform_create ", serializer) if not serializer.is_valid(raise_exception=false): print("1111-3 serializer.is_valid() ", serializer.is_valid()) return response({'custome error!!!!!!!!!'}, status=status.http_400_bad_request) else: print("1111-7 serializer.validated_data ", serializer.validated_data) user = user.objects.filter(id=8) serializer.save(user=user.first()) print("1111-8 perform_create ") the process .create() in views.py --> .perform_create() in views.py --> .create() in serializers.py --> response client
both can work!
, found if post invalid data, process not go .perform_create() part comment .create() part, seems .perform_create() can not check serializer.is_valid(),neither
so what's difference between .post() , .create() in views.py , should use .post() or should use .create() plus .perform_create()
want know because have use custome response message {'custome error!!!!!!!!!'} , i'm confused effect, should put logic
Comments
Post a Comment