zoukankan      html  css  js  c++  java
  • 在rest_framwork中进行图片的多条存储时注意事项

    注意事项:

    # django 里面上传文件默认只处理单个文件上传,批量上传的时候request.FILES 的类型为 MultiValueDict,这种字典类是特殊定义的,要取得list 需要调用 getlist  方法:
    1.在接收前端传送过来的图片时,如果是一张图片可以用
      files = request.FILES.get('files') 来取出图片对象,并且通过.name来获取图片名字
    2.如果前端传送过来的图片是多张,那么则需要使用

      files = request.FILES.getlist('files'),取出来一个存有图片对象的列表。通过for循环在进行操作
      

    进行图片的多增

    view.py

    import os
    class Image(ModelViewSet):
        queryset = models.Image.objects.all()
        serializer_class = serializer.CreateImageSerializer
        def create(self, request, *args, **kwargs):
            files = request.FILES.getlist('files')   #获取图片
            image_path={}
            for file in files:
                path=os.path.join('Cinematography','media', 'photo', file.name)   #拼接路径
                with open(path, 'wb') as f:            #写入文件
                    for line in file:
                        f.write(line)
                    image_path[file.name]=path
            print(image_path,type(image_path),999)
            ser = self.get_serializer(data=image_path)
          self.perform_create(ser)


      if ser.is_valid():
      ser.save() #调用序列化类的create方法
      return APIResponse(code=1,msg='成功')
      else:
      print(ser.errors)
      return APIResponse(code=0, msg=ser.errors)


        def perform_create(self, serializer):
        serializer.save()
    
    

    serializer.py

    class CreateImageSerializer(serializers.ModelSerializer):
        class Meta:
            model = models.Image
            fields = ['image','id']
            extra_kwargs = {id:{'read_only': True}}
        def validate(self, attrs):
    
            return attrs
  • 相关阅读:
    iOS自动布局框架-Masonry详解
    iOS设置圆角的三种方式
    iOS9 App Thinning(应用瘦身)功能介绍
    以无线方式安装企业内部应用
    Xcode 9 Analyzing Crash Reports
    IQKeyboardManager 问题锦集
    列表
    字符串索引,切片,步长及方法详解
    while循环语句、格式化输出、常用运算符、字符编码
    if语句简单练习
  • 原文地址:https://www.cnblogs.com/ltyc/p/14270534.html
Copyright © 2011-2022 走看看