在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
标签:files,ser,image,request,framwork,rest,注意事项,path,serializer 来源: https://www.cnblogs.com/ltyc/p/14270534.html