Как получить относительный путь к файлам в django ListAPIView? - PullRequest
0 голосов
/ 16 февраля 2019

Требуется, чтобы относительный путь изображения был возвращен из API:

Требуется, чтобы формат "/media/image.jpg", not"http://0.0.0.1:8000/media.image.jpg" был возвращен для API

Для последующего получения полного URL, т.е. формата "http://0.0.0.1:8000/media.image.jpg"

class ImageListAPIView(ListAPIView):
    serializer_class = QuestionImageSerializer
    queryset = QuestionImage.objects.all()

И для последующего получения правильного вывода, т.е.: media/image.jpg format, , который требуется .

class ImageAPIView(APIView):
    def get(self, request, format=None):
        QuestionImages = QuestionImage.objects.all()
        SerializedData = QuestionImageSerializer(QuestionImages, many=True)
        return Response({
            'QeustionImages:': SerializedData.data
        })

Как вернуть URL относительного пути для ListAPIView?

Попытка поместить следующее в сериализаторе, , но затем не можетзагрузить изображение в API.

 image = serializers.SerializerMethodField()
 def get_image(self, obj):
     return obj.image.url

PS:

models.py:

class QuestionImage(models.Model):
    image = models.ImageField(upload_to=question_directory_path)

сериализаторы.py:

class QuestionImageSerializer(ModelSerializer):
    class Meta:
        model = QuestionImage
        fields= [
            'id',
            'image',
        ]

1 Ответ

0 голосов
/ 16 февраля 2019

Я предполагаю, что вы используете gunicorn или какой-либо другой сервер в работе и устанавливаете его на nginx или apache.Таким образом, чтобы получить правильный абсолютный URL-адрес из списка, вам нужно добавить в файл settings.py

USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

следующее, чтобы сгенерировать абсолютный URL-адрес django находит хост и порт из контекста запроса.Внося вышеуказанные изменения, вы инструктируете Django использовать заголовок Value of X-Forwarded-For для хоста и порта.

Вы должны убедиться, что все используемые вами Nginx или Apache должны передавать эти заголовки вперед.Для Nginx и Apache вы можете найти инструкции здесь https://www.nginx.com/resources/wiki/start/topics/examples/likeapache/

...