当前位置: 首页 > 知识库问答 >
问题:

DjangoRest框架-追加主机名到响应

松秦斩
2023-03-14

当我要求一个图像http://127.0.0.1:8000/api/images/1/或者传入参数进行裁剪http://127.0.0.1:8000/api/images/1/?height=320

我得到的答复是:

   {
        "image": "/media/10438039923_2ef6f68348_c.jpg",
        "description": "Description 1",
        "title": "Item 1"
    }

而在http://127.0.0.1:8000/api/images/

答复是:

      {
            "title": "Item 1",
            "description": "Description 1",
            "image": "http://127.0.0.1:8000/media/10438039923_2ef6f68348_c.jpg"
        },
        {
            "title": "Item 2",
            "description": "Description 2",
            "image": "http://127.0.0.1:8000/media/ALLEY-stock1502.jpg"
        },

为什么缩略图不容易返回主机名,我如何将基本网址追加到响应中?

以下是我的看法。派克

from __future__ import unicode_literals
from django.shortcuts import render
from rest_framework import viewsets
from rest_framework.response import Response
from .models import Image
from .serializers import ImageSerializer
from easy_thumbnails.files import get_thumbnailer


class ImageViewSet(viewsets.ModelViewSet):
    queryset = Image.objects.all()
    serializer_class = ImageSerializer

    def retrieve(self, request, pk=None):
        height = request.query_params.get('height', None)
        width = request.query_params.get('width', None)
        img = self.get_object()
        if height and width:
            options = {'size': (height, width), 'crop': True}
            thumb_url = get_thumbnailer(img.image).get_thumbnail(options).url
        else:
            thumb_url = get_thumbnailer(img.image).url
        serializer = self.get_serializer(img)
        response_dict = {}
        response_dict.update(serializer.data)
        response_dict['image'] = thumb_url
        return Response(response_dict)

共有3个答案

郎成弘
2023-03-14

或者在您的设置中,从

MEDIA_URL = '/media/'

MEDIA_URL = 'http://127.0.0.1:8000/media/'
祁坚壁
2023-03-14

正如Laurent LAPORTE所说,主机名存储在HttpRequest中。

但是要获得它,你不应该直接访问它,而是使用:

get_host()

否则,您将绕过安全保护。

见:https://docs.djangoproject.com/en/2.0/topics/security/#host-标题验证

谢阳成
2023-03-14

主机名存储在HttpRequest中,因此您可以在响应中使用它。

见:https://docs.djangoproject.com/en/1.11/ref/request-response/#django.http.HttpRequest.META

 类似资料:
  • 我正在获取javax.mail.MessagingException:无法连接到SMTP主机:主机名端口:25响应:552 有时邮件发送成功。但有时我会遇到例外。 我不清楚为什么会发生这种情况。如果有什么事情出了问题,那么就不应该发送邮件。但例外情况有时还是会发生。 javax.mail.messagingException:无法连接到SMTP主机:mail.mydomain.com,端口:25,

  • 问题内容: 我想将Pandas数据框附加到名为“ NewTable”的sqlite数据库中的现有表上。NewTable具有三个字段(ID,名称,年龄),ID是主键。我的数据库连接: 我要附加的数据框: 如上所述,ID是NewTable中的主键。键“ L1”已在NewTable中,但键“ L11”不在中。我尝试将数据框追加到NewT​​able。 这将引发错误: 该错误很可能是因为键“ L1”已经在

  • 问题内容: 我有一个函数,它返回像这样的字典: 我试图将此字典追加到这样的数据框: 不幸的是,数据框的打印导致空的数据框。有任何想法吗? 问题答案: 您没有将值分配给结果。

  • 如果你不想重复造轮子,你可以选择一款响应式的框架,目前市面上类似的框架也有很多,像Bootstrap、Foundation,你也可以使用像H5 Boilerplate来创建响应式项目,但不论你使用何种方式,掌握底层的原理对于你来说比挑选一门框架更有意义。所以大家Fighting~~~

  • 问题内容: 这可能很容易,但是我有以下数据: 在数据框1中: 在数据框2中: 我想要一个具有以下形式的数据框: 我尝试使用该方法,但是得到了交叉连接(即笛卡尔积)。 什么是正确的方法? 问题答案: 通常看来,您只是在寻找联接:

  • 问题内容: 谁能解释一下主机名和规范主机名之间的区别? 我当前正在使用InetAddress类使用IP地址获取主机名。我遇到了这两个API。所以我只是想知道,我应该选择哪一个? 问题答案: 两者之间有一些区别: 将尝试解析FQDN。因此,您将获得 _foo.mycompany.com, 而可能仅返回 _foo 。 将始终进行反向DNS查找,而如果在构造函数中提供了主机名,则将返回存储的主机名。 如