美文网首页
Django文件地址序列化

Django文件地址序列化

作者: alue | 来源:发表于2022-12-12 11:07 被阅读0次

    如果用 Django REST Framework 的序列化器来序列化文件字段,能够返回绝对地址(即带有http://开头的全部URI),但缺点就是速度慢。

    有测试表明, Django REST Framework 的序列化开销很大,尤其是 ModelSerializer,比直接用 .values 方法慢好几百倍。

    如何用 .values 方法返回文件的绝对URL呢?

    这里探索出一个解决方案:

    from django.db.models import Q, Sum, F, Value, CharField
    from django.db.models.functions import Concat
    from django.conf import settings
    
    User.objects.annotate(avatar_url=Concat(
            Value(request._current_scheme_host + settings.MEDIA_URL), 
            F('avatar'),
            output_field=CharField())
            ) 
            .values('avatar_url')
    

    利用request._current_scheme_host 获取协议和host地址,然后利用 ConcatValue函数完成地址拼接,最后利用 annotate实现变量命名。

    相关文章

      网友评论

          本文标题:Django文件地址序列化

          本文链接:https://www.haomeiwen.com/subject/lnrfqdtx.html