Django休息框架api - 图像网址没有正确返回

Sur*_*ten 2 python django django-models django-views django-rest-framework

我在返回的图片网址中遇到问题,这是不正确的.

我的返回图片网址是"http://127.0.0.1:8000/showimage/6/E%3A/workspace/tutorial_2/media/Capture1.PNG" 我需要的

"http://127.0.0.1:8000/media/Capture1.PNG"
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

当我点击image_url然后在新的浏览器选项卡中打开图像但是当前显示的错误: 在此输入图像描述 view.py

from showimage.models import ShowImage
from showimage.serializers import ShowImageSerializer
from rest_framework import generics

# Create your views here.

    class ShowImageList(generics.ListCreateAPIView):
        queryset = ShowImage.objects.all()
        serializer_class = ShowImageSerializer

    class ShowImageDetail(generics.RetrieveUpdateDestroyAPIView):
        queryset = ShowImage.objects.all()
        serializer_class = ShowImageSerializer
Run Code Online (Sandbox Code Playgroud)

model.py

from __future__ import unicode_literals

from django.db import models
from django.conf import settings


# Create your models here.

class ShowImage(models.Model):
    image_name = models.CharField(max_length=255)
    image_url = models.ImageField(upload_to=settings.MEDIA)
Run Code Online (Sandbox Code Playgroud)

serializer.py

from rest_framework import serializers
from showimage.models import ShowImage

class ShowImageSerializer (serializers.ModelSerializer):
    class Meta:
        model = ShowImage
        fields = ('id', 'image_name', 'image_url')
Run Code Online (Sandbox Code Playgroud)

settings.py

MEDIA=os.path.join(BASE_DIR, "media")
Run Code Online (Sandbox Code Playgroud)

urls.py

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^showimage/', include('showimage.urls')),
]
Run Code Online (Sandbox Code Playgroud)

我是python的新手,也是django-rest-framework的新手.还请告诉我如何扩展模型或序列化类

感谢先进的帮助..

Rem*_*rra 6

您可能想在您的设置中尝试此操作:

MEDIA_URL = '/media/'
MEDIA_ROOT=os.path.join(BASE_DIR, "media")

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^showimage/', include('showimage.urls')),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

在你的模型中:

class ShowImage(models.Model):
    image_name = models.CharField(max_length=255)
    image_url = models.ImageField(upload_to="") # or upload_to="images", which would result in your images being at "http://127.0.0.1:8000/media/images/Capture1.PNG"
Run Code Online (Sandbox Code Playgroud)


Sur*_*ten 6

最后,我在@Remi 的帮助下解决了这个障碍,谢谢@Remi 但是我做了一些其他的改变,以便我详细说明解决方案并解决这个问题。

设置.py

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT=os.path.join(BASE_DIR, "media")
Run Code Online (Sandbox Code Playgroud)

网址.py

from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^showimage/', include('showimage.urls')),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)