Как получить местоположение изображения с помощью url, используя представление Generics API в ответе в django rest framework
Как получить расположение изображения с полным url
models.py
class UploadImage(models.Model):
img_id = models.AutoField(primary_key=True)
image = models.ImageField(upload_to='images/')
def __str__(self):
return str(self.image)
serializers.py
class UploadedImageSerializer(serializers.ModelSerializer):
class Meta:
model = UploadImage
fields = [
'img_id',
'user_id',
'image',
Получить местоположение изображения с url в ответе в django rest framework очень просто
просто следуйте простым шагам и вы получите ответ
сначала добавьте некоторые детали и путь в settings.py и urls.py, чтобы django определил, что вы загружаете изображение и куда его сохранить
project/settings.py
MEDIA_URL = '/media/' #django will autometically made the media folder at project level
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
project/urls.py
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
app/models.py
class UploadImage(models.Model):
img_id = models.AutoField(primary_key=True)
image = models.ImageField(upload_to='images/') #it will save image(s) in media/images folder
def __str__(self):
return str(self.image)
app/serializers.py
class UploadedImageSerializer(serializers.ModelSerializer):
class Meta:
model = UploadImage
fields = [
'img_id',
'image',
app/views.py
class UploadedImageAPIView(generics.CreateAPIView):
serializer_class = UploadedImageSerializer
queryset = UploadImage.objects.all()
def post(self, request):
image = request.data.get('image', False)
serializer = UploadedImageSerializer(data=request.data, context={'request': request})
#context={'request': request will return full url
#ex.http://192.168.1.24:8000/media/images/97800.0_8iOq60p.png
if serializer.is_valid():
serializer.save()
return Response({
'status': True,
'message': 'Image Upload Successfully',
'data': serializer.data,
}, status = status.HTTP_201_CREATED)
else:
return Response({
'status': False,
'message': 'Error! Make sure image field is not empty',
}, status = status.HTTP_400_BAD_REQUEST)
app/urls.py
urlpatterns = [
url(r'^upload_img', UploadedImageAPIView.as_view())
]
Response
{
"status": true,
"message": "Image Upload Successfully",
"data": {
"img_id": 1,
"image": "http://192.168.1.24:8000/media/images/emoji_jrGNDyk.png"
}
}
Надеюсь, вы получите ответ, который ищете:)
На это уже был дан ответ здесь: https://stackoverflow.com/a/35522896
Кратко: вы можете использовать SerializerMethodField для возврата относительного URL для ImageField и если вам нужен полный URI, вы можете использовать метод Django build_absolute_uri для этого (https://docs.djangoproject.com/en/3.2/ref/request-response/#django.http.HttpRequest.build_absolute_uri)