123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- #coding=utf-8
- from rest_framework import fields
- def dump_serializer_errors(serializer):
- error_messages = {
- u'blank': u'此字段不能为空',
- u'required': u'此字段必填',
- u'max_length':u'此字段不超过%d个字符',
- u'min_length':u'此字段不少于%d个字符',
- u'null': u'该字段不能为空' # This field may not be null
- }
- field_error_messages = {
- fields.BooleanField:{
- u'invalid': u'此字段不是一个合法的布尔值'
- },
- fields.CharField: {
- u'invalid': u'此字段不是一个合法的字符串'
- },
- fields.NullBooleanField: {
- u'invalid': u'此字段不是一个合法的布尔值'
- },
- fields.EmailField: {
- u'invalid': u'邮箱格式不正确'
- },
- fields.RegexField: {
- u'invalid': u'此字段没有匹配的一个必要的模板'
- },
- fields.SlugField: {
- u'invalid': u'此字段不是一个合法的slug,应该由字母,数字,下划线,连字符组成',
- u'invalid_unicode': u'此字段不是一个合法的slug,应该由unicode字母,数字,下划线,连字符组成'
- },
- fields.URLField: {
- u'invalid': u'此字段不是一个合法的URL'
- },
- fields.UUIDField: {
- u'invalid': u'此字段不是一个合法的UUID'
- },
- fields.IPAddressField: {
- u'invalid': u'此字段不是一个合法的IPv4或者IPv6地址'
- },
- fields.IntegerField: {
- u'invalid': u'此字段不是一个合法的整数',
- u'max_value': u'此字段的数值要小于等于%d',
- u'min_value': u'此字段的数值要大于等于%d',
- u'max_string_length': u'此字段长度超过1000',
- },
- fields.FloatField: {
- u'invalid': u'此字段不是一个合法的浮点数',
- u'max_value': u'此字段的数值要小于等于%d',
- u'min_value': u'此字段的数值要大于等于%d',
- u'max_string_length': u'此字段长度超过1000',
- },
- fields.DecimalField: {
- u'invalid': u'此字段不是一个合法的数字',
- u'max_value': u'此字段的数值要小于等于%d',
- u'min_value': u'此字段的数值要大于等于%d',
- u'max_digits': u'此字段的数值不超过%d位',
- u'max_decimal_places': u'此字段十进制位不超过%d',
- u'max_whole_digits': u'此字段小数点前的数字不超过%d。',
- u'max_string_length': u'此字段长度超过1000',
- },
- fields.DateTimeField: {
- u'invalid': u'日期时间格式不合法',
- u'date': u'不能只输入日期,应输入日期和时间',
- u'make_aware': u'时区%d不合法',
- u'overflow': u'日期时间超出范围',
- },
- fields.DateField: {
- u'invalid': u'日期格式不合法',
- u'date': u'应输入日期,不能输入日期和时间',
- },
- fields.TimeField: {
- u'invalid': u'时间格式不合法',
- },
- fields.DurationField: {
- u'invalid': u'时间段格式不合法,应该用格式:%d',
- },
- fields.ChoiceField: {
- u'invalid_choice': u'此字段不是一个合法的选项',
- },
- fields.MultipleChoiceField: {
- u'invalid_choice': u'此字段不是一个合法的选项',
- u'not_a_list': u'应输入数组(list)格式',
- u'empty': u'此选项不能为空',
- },
- fields.FilePathField: {
- u'invalid_choice': u'此字段不是一个合法的路径',
- },
- fields.FileField: {
- u'required': u'没有提交文件',
- u'invalid': u'提交的不是文件,请检查表单的编码类型',
- u'no_name': u'没有文件名',
- u'empty': u'提交的是一个空文件',
- u'max_length': u'文件内容要小于%d个字符',
- },
- fields.ImageField: {
- u'invalid_image': u'提交的不是图片文件或者图片文件损坏,请提交一个合法的图片文件',
- },
- fields.ListField: {
- u'not_a_list': u'此字段应传入数组(list)类型',
- u'empty': u'传入的list不能为空',
- u'min_length': u'该字段至少要%d个元素',
- u'max_length': u'该字段最多能有%d个元素',
- },
- fields.DictField: {
- u'not_a_dict': u'此字段应传入字典(dict)类型',
- },
- fields.JSONField: {
- u'invalid': u'此字段不是一个合法的JSON类型'
- },
- fields.ModelField: {
- u'max_length': u'此字段长度要小于等于%d个字符'
- }
- }
- result = [u'数据错误<br />', ]
- for i in range(0, len(serializer.errors.keys())):
- k = list(serializer.errors.keys())[i]
- v = list(serializer.errors.values())[i]
- field = serializer.fields.get(k)
- label = field.label
- if label:
- label += ' - '
- else:
- label = ''
- error_detail = v[0]
- try:
- msg = field_error_messages[type(field)][error_detail.code]
- if type(field) == fields.IntegerField or type(field) == fields.FloatField:
- if error_detail.code == u'max_value':
- msg = msg % field.max_value
- if error_detail.code == u'min_value':
- msg = msg % field.min_value
- if type(field) == fields.DecimalField:
- if error_detail.code == u'max_value':
- msg = msg % field.max_value
- if error_detail.code == u'min_value':
- msg = msg % field.min_value
- if error_detail.code == u'max_digits':
- msg = msg % field.max_digits
- if error_detail.code == u'max_decimal_places':
- msg = msg % field.decimal_places
- if error_detail.code == u'max_whole_digits':
- msg = msg % field.max_whole_digits
- if type(field) == fields.DateTimeField:
- if error_detail.code == u'make_aware':
- msg = msg % field.timezone
- if type(field) == fields.DurationField:
- if error_detail.code == u'invalid':
- msg = msg % u'[DD] [HH:[MM:]]ss[.uuuuuu]'
- if type(field) == fields.DateTimeField:
- if error_detail.code == u'make_aware':
- msg = msg % field.timezone
- if type(field) == fields.ListField:
- if error_detail.code == u'min_length':
- msg = msg % field.min_length
- if error_detail.code == u'max_length':
- msg = msg % field.max_length
- if type(field) == fields.ModelField:
- if error_detail.code == u'max_length':
- msg = msg % field.max_length
- except:
- try:
- msg = error_messages[error_detail.code]
- if error_detail.code == u'max_length':
- msg = msg % field.max_length
- if error_detail.code == u'min_length':
- msg = msg % field.min_length
- except:
- msg = str(error_detail)
- msg = label + msg
- result.append(msg)
- return u'<br />'.join(result)
|