Как отправить ссылку на изображение в ответе
Я хочу в ответе отправить ссылку на фотографию, которая находится на хостинге, я запускаю django приложение на хостинге через python manage.py runserver 0.0.0.0:8000 . Как мне сделать так, чтобы в ответе на запрос была ссылка на изображение, которое находится на хостинге.
Пример: Я получаю такой ответ при обращении к API
{
"title": "add",
"description": "some text",
"image": "http://127.0.0.1:8000/media/photo_2022-09-12_20-57-08.jpg",
"created_at": "2022-09-12T22:24:42.449098+03:00"
}
Я хочу получить такой ответ:
{
"title": "add",
"description": "some text",
"image": "domain.api/media/photo_2022-09-12_20-57-08.jpg",
"created_at": "2022-09-12T22:24:42.449098+03:00"
}
models.py
class Event(models.Model):
title = models.TextField()
description = models.TextField()
image = models.ImageField(blank=True)
is_main = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
views.py
class EventDetailOrList(viewsets.ReadOnlyModelViewSet):
queryset = Event.objects.all()
serializer_class = EventSerializer
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = EventFilter
Я бы использовал модуль socket для получения имени хоста IP:
import socket
address = 127.0.0.1:8000
host = socket.gethostbyaddr(address)
return host
Если у вас есть доступ к объекту request
, вы можете сделать что-то вроде
request.META['REMOTE_ADDR'] # '127.0.0.1'
root = request.META['HTTP_HOST'] # '127.0.0.1:8000'
# combined with:
from django.templatetags.static import static
path = static('media/nealium_avatar.png')
full = '{0}/{1}'.format(root, path)
# full = '127.0.0.1:8000/static/media/nealium_avatar.png'
Давайте сделаем это шаг за шагом:
1. settings.py
INSTALLED_APPS = [
...
...
...
'django.contrib.sites',
...
...
]
SITE_ID = 1
после этого нужно запустить migrate
python manage.py migrate
2. models.py
class Event(models.Model):
title = models.TextField()
description = models.TextField()
image = models.ImageField(blank=True)
is_main = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
def get_image(self):
if self.image:
return Site.objects.get_current().domain + self.image.url
else:
return ""
3. serializers.py
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = [
'title',
'description',
'get_image',
'created_at',
]
После этих шагов вы можете редактировать домен вашего сайта на панели Django Admin.
Надеюсь, это поможет!