一遍文章直接显示年月日时间太难看了, 最新想为app改善用户体验, 时间显示为1分钟前, 1小时前, 1个月前等等, 说干就干要实现这个功能只能在DRF上增加字段了.
一. 在serializer.py中新增字段:
class ArticleSerializer(serializers.ModelSerializer): diff = serializers.SerializerMethodField('func_diff') # 这里参数为自定义的函数名, 如果设置参数则函数名默认为'get_' + 'diff'
class Meta:
model = Article
二. 在里面写自定义函数:
class ArticleSerializer(serializers.ModelSerializer): diff = serializers.SerializerMethodField('func_diff') def func_diff(self, obj): # 上面指定的函数 diff = diff_time(obj.created) # 处理时间间隔的函数 return diff class Meta: model = Article
处理日期的函数简单处理一下, 看看效果, 谁有更好的欢迎拍砖哈..
def diff_time(old): """ :param old: 字符串时间或, datetime :return: 时间间隔 """ if isinstance(old, unicode): old = time.strptime(old, "%Y-%m-%dT%H:%M:%SZ") old = time.mktime(old) else: old = time.mktime(old.timetuple()) dif = (time.time()-old) if dif <= 3600: return str(int(dif//60)+1) + u'分钟前' elif dif <= 86400: return str(int(dif//3600)+1) + u'小时前' elif dif <= 2592000: return str(int(dif//86400)+1) + u'天前' else dif > 5184000: return u'1个月前'
三. 还没完,因为增加了新的字段, 必需要写入Mta/fields内. 不定义fields则默认全部字段但不会包含自定义的字段,如果有自定义的字段会报错, 在定义字段的时候使用已存在的字段名,则会对这个字段进行扩展, 这种情况下fields不写, 默认全部字段也是可以的.
class ArticleSerializer(serializers.ModelSerializer): diff = serializers.SerializerMethodField('func_diff') def func_diff(self, obj): # 上面指定的函数 diff = diff_time(obj.created) # 处理时间间隔的函数 return diff class Meta: model = Article fields = ('id', 'diff', '....', )
四. 最终结果:
{ ... "created": "2017-01-10T06:34:48.162396Z", "diff": "8小时前", ... }