zoukankan      html  css  js  c++  java
  • 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小时前",
        ...
    }
  • 相关阅读:
    Android内存优化5 了解java GC 垃圾回收机制3
    一起刑事案件法庭辩护 z
    辩护技巧总结——律师在刑事辩护中应注意的几个问题 z
    证据对抗、证据链标准 z
    里德九步审讯法 z
    WCF服务在高并发情况下报目标积极拒绝的异常处理 z
    C#EasyHook例子C# Hook 指定进程C#注入指定进程 z
    玄机论坛Socket类库源码 当前版本 2.6.3 更新日期:10-09/2015 z
    庭审全程文字实录 z
    庭审精彩语录整理 z
  • 原文地址:https://www.cnblogs.com/zyu911/p/5644651.html
Copyright © 2011-2022 走看看