码迷,mamicode.com
首页 > Web开发 > 详细

django drf 反序列化上传图片

时间:2020-02-05 18:54:42      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:nbsp   hunk   import   文件夹   返回   data   image   serialize   pattern   

  • settings.py
#上传图片的类型
ALLOWED_IMG_TYPE = [‘jpg‘,‘png‘,‘PNG‘]

#上传图片的地址
UPLOAD_ADDRESS = ‘static/upload/‘

STATIC_URL = ‘/static/‘
#配置静态文件夹


STATICFILES_DIRS = [
    os.path.join(BASE_DIR,‘static‘),
]
  • urls.py    (二级路由)  
from django.urls import path
from . import views
#二级路由
urlpatterns = [
  path(‘goods/‘, views.GoodsView.as_view()),
]
  • serializers.py
#商品的反序列化
class GoodUnSerializer(serializers.Serializer):
    #商品名称约束
    name = serializers.CharField(max_length=32)
    #商品价格约束
    price = serializers.DecimalField(max_digits=9,decimal_places=2)
    #商品分类约束
    cate_id = serializers.IntegerField()
    #商品图片约束
    img = serializers.CharField(max_length=255)
    def create(self, validated_data):
        #将获取的字典类型打散
        return models.Goods.objects.create(**validated_data)
  • views.py  (字段name,price等可以写约束条件,这里就简单的给图片做一个约束)
#商品
class GoodsView(APIView):
   
    def post(self, request):
        name = request.POST.get(‘name‘, ‘‘).strip()
        price = request.POST.get(‘price‘, 0)
        cate_id = request.POST.get(‘cate_id‘)
        data = {
            ‘name‘:name,
            ‘price‘:price,
            ‘cate_id‘:cate_id
        }
        img = request.FILES.get(‘img‘)
        if img:
            #获取后缀名
            ext = img.name.split(‘.‘)[-1]
            #如果上传图片的后缀名不在配置的后缀名里返回格式不允许
            if ext not in settings.ALLOWED_IMG_TYPE:
                return Response({
                    "status":205,
                    "msg":"格式不允许",
                    "data":‘‘
                })
            # path = ‘‘
            #新的文件名
            newfielname = datetime.now().strftime(‘%Y%m%d%H%M%S‘) + str(random.randint(10000,99999)) + ‘.‘ + ext  #采用时间和随机数
            path = settings.UPLOAD_ADDRESS + newfielname
            with open(path,‘wb‘) as f:  #二进制写入
                for i in img.chunks():
                    f.write(i)
            data[‘img‘] = newfielname
            #入库反序列化添加
            obj = GoodUnSerializer(data=data)
            if obj.is_valid():
                obj.save()
                print(obj.errors)
                return Response({
                    ‘status‘:200,
                    ‘msg‘:‘添加成功‘,
                    ‘data‘:‘‘

                })

            return Response({
                ‘status‘:201,
                ‘msg‘:‘添加失败‘,
                ‘data‘:‘‘
            })
  • 测试
    •   不成功的技术图片
    技术图片

  由于之前限制图片的后缀名,所以jfif格式上传不成功

    • 来一个格式允许的吧

技术图片

技术图片

 

django drf 反序列化上传图片

标签:nbsp   hunk   import   文件夹   返回   data   image   serialize   pattern   

原文地址:https://www.cnblogs.com/u-damowang1/p/12264664.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!