Как получить местоположение изображения с помощью 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)

Вернуться на верх