【问题标题】:How to upload photos to a file in my computer using Django rest framework如何使用 Django rest 框架将照片上传到我的计算机中的文件
【发布时间】:2021-08-15 15:08:36
【问题描述】:

我创建了一个照片模型、序列化器和视图,用户可以将照片上传到我的网站。我了解到最好的解决方案是将照片上传到计算机上并将路径上传到数据库中。但是如何通过我的网站或我的 api 将照片上传到我的电脑?

Modèles.py

ken authentification. So for adding an Announcement the user must be authenticated.

Models.py

class User(AbstractUser):
    username = None
    email = models.EmailField(max_length=100, verbose_name='email', 
              unique=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []
    objects = UserManager()

class Announcement(models.Model):
     author = models.ForeignKey(User, on_delete=models.CASCADE)
     name = models.CharField(max_length=100)
     photo = models.ManyToManyField(Photo, blank=True)

class Photo(models.Model):
     name = models.CharField(max_length=100)
     content_type = models.CharField(max_length=100)
     path = models.CharField(max_length=100)

序列化器.py


class AnnouncementSerializer(serializers.ModelSerializer):
    author = UserSerializer(required=True)
    parameters = ParameterSerializer(many=True, 
       required=False)
    photo = PhotoSerializer(many=True, 
        required=False)
    class Meta:
        model = Announcement
        fields = ['id', 'name', 'author', 
                         'parameters', 'photo']

class UserSerializer(serializers.ModelSerializer):
    photo = PhotoSerializer()
    class Meta:
        model = User
        fields = ['id', 'email','photo', ]

class ParameterSerializer(serializers.ModelSerializer):
    class Meta:
        model = Parameter
        fields = '__all__'
class PhotoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Photo
        fields = '__all__'

Views.py

class AnnouncementCreate(CreateAPIView):
    permission_classes = [IsAuthenticated]
    queryset = models.Announcement.objects.all()
    serializer_class = AnnouncementSerializer

【问题讨论】:

    标签: python django django-models django-rest-framework photo


    【解决方案1】:

    您应该在模型中使用ImageField。然后,当您将图片上传到您的网址时,django 会将其保存在您应该在settings.pyMEDIA_ROOT 部分中设置的目录中:

    首先安装pillow以使用ImageField

    pip3 install pillow
    

    之后,将此字段作为照片添加到您的模型中:

    ...
    photo = models.ImageField(...)
    ...
    

    这可能会有所帮助:Django REST Framework image upload

    【讨论】:

    • 但是如何将路径保存在路径字段中?
    • 不再需要路径字段@Zero0
    • 它工作了非常感谢,但为什么甚至需要名称归档?每次输入名称字段时,它都会创建一个新文件夹
    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 2022-10-13
    • 2013-10-25
    • 2019-07-01
    • 2015-10-04
    • 2013-12-26
    • 2016-10-25
    • 1970-01-01
    相关资源
    最近更新 更多