From 6ef16c825341e1f47fe2ad65e08b2b132c44608e Mon Sep 17 00:00:00 2001 From: virusdefender Date: Mon, 11 Mar 2019 11:30:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=83=A8=E5=88=86=E6=83=85?= =?UTF-8?q?=E5=86=B5=E4=B8=8B=E6=8F=90=E5=8F=96=20serializer=20=E7=9A=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/api/api.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/utils/api/api.py b/utils/api/api.py index 5b7a231..3f3f24c 100644 --- a/utils/api/api.py +++ b/utils/api/api.py @@ -89,20 +89,22 @@ class APIView(View): def error(self, msg="error", err="error"): return self.response({"error": err, "data": msg}) - def _serializer_error_to_str(self, errors): - for k, v in errors.items(): - if isinstance(v, list): - return k, v[0] - elif isinstance(v, OrderedDict): - for _k, _v in v.items(): - return self._serializer_error_to_str({_k: _v}) + def extract_errors(self, errors, key="field"): + if isinstance(errors, dict): + if not errors: + return key, "Invalid field" + key = list(errors.keys())[0] + return self.extract_errors(errors.pop(key), key) + elif isinstance(errors, list): + return self.extract_errors(errors[0], key) def invalid_serializer(self, serializer): - k, v = self._serializer_error_to_str(serializer.errors) - if k != "non_field_errors": - return self.error(err="invalid-" + k, msg=k + ": " + v) + key, error = self.extract_errors(serializer.errors) + if key == "non_field_errors": + msg = error else: - return self.error(err="invalid-field", msg=v) + msg = f"{key}: {error}" + return self.error(err=f"invalid-{key}", msg=msg) def server_error(self): return self.error(err="server-error", msg="server error")