Django - 使用 API 下载某人的图像

问题描述 投票:0回答:1

你好,我正在 django 中开发一个博客项目。 每篇文章都附有图像 我想与一些朋友分享我的项目(由他们克隆 github 存储库),但不希望他们下载所有图像。

所以我在我的项目上制作了一个新的应用程序,一个带有 django-rest-framework 的 API,允许他们从我的项目中获取图像列表 一旦有人获得列表,它就会根据 json 值在数据库中创建 PostImagePost 的新实例

他们在数据库中获取新实例,但他们没有获取图像,他们只获取文件路径

我不知道如何使用 API 向他们提供图像,并使图像进入他们的项目。

谢谢你

所以对于我的模型:

class Post(models.Model):
    title = models.CharField(max_length=250)
    body = models.TextField()
    author = models.ForeignKey(User, related_name='blog_posts', on_delete=models.CASCADE)
    images = models.ManyToManyField(ImagePost, related_name='images', blank=True)
class ImagePost(models.Model):
    image = models.ImageField(upload_to='blog_posts/', blank=True)

还有我的 API 类:

class PostList(ListAPIView):
    queryset = Post.objects.filter(archived=False)
    serializer_class = PostSerializer

class ImagePostList(ListAPIView):
    queryset = ImagePost.objects.all()
    serializer_class = ImagePostSerializer
class ImagePostSerializer(ModelSerializer):

    class Meta:
        model = ImagePost
        fields = ["id", "image" ]

网址:

    path('post/list/', views.PostList.as_view(), name='post_list'),
    path('imagepost/list/', views.ImagePostList.as_view(), name='imagepost_list'),

我的函数根据 json 值创建实例:

def create_imagepost_from_url_json(request):

    current_site = get_current_site(request)
    domain = current_site.domain,
    url = "http://" + str(domain[0])+"/api/video/list/"

    response = requests.get(url)

    if response.status_code == 200:
        data = response.json()

        for obj in data:
            ImagePost.objects.create(**obj)
    
    return redirect('index')
python django django-rest-framework
1个回答
0
投票

我建议您更新

ImagePostSerializer
以包含图像数据本身,而不仅仅是文件路径。在添加以下功能之前,请确保从rest_framework导入序列化的所有导入。

这是您的代码的修改;


from rest_framework import serializers
from .models import ImagePost

class ImagePostSerializer(serializers.ModelSerializer):
    image = serializers.ImageField(use_url=True) # This will definitely include the image URL in the response for your friends

    class Meta:
        model = ImagePost
        fields = ["id", "image"]

注意:确保您的项目中安装了 Pillow,如果您仍在本地开发,请在您的项目中添加以下代码

url.py
,以便 Django 轻松为您的静态文件提供服务。


from django.conf.urls.static import static

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL,
                          document_root=settings.STATIC_ROOT)

    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)

祝你好运,朋友

© www.soinside.com 2019 - 2024. All rights reserved.