Django rest_framework 加入时间间隔

 一遍文章直接显示年月日时间太难看了, 最新想为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小时前",
    ...
}

 

转载于:https://www.cnblogs.com/zyu911/p/5644651.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值