def post(self, request): # 1.接收参数 avatar = request.FILES.get('avatar') if not avatar: return http.JsonResponse({'errno': RET.PARAMERR, 'errmsg': '参数错误'}) if not image_file(avatar): return http.JsonResponse({'errno': RET.PARAMERR, 'errmsg': '参数错误'}) # 读取出文件对象的二进制数据 file_data = avatar.read() # try: key = storage(file_data) except Exception as e: logger.error(e) return http.JsonResponse({ 'errno': RET.SERVERERR, 'errmsg': '图片保存失败' }) try: request.user.avatar = key request.user.save() except DatabaseError as e: logger.error(e) return http.JsonResponse({ 'errno': RET.SERVERERR, 'errmsg': '图片保存失败' }) data = {'avatar_url': settings.QINIU_URL + key} print(data) return http.JsonResponse({ 'errno': RET.OK, 'errmsg': '头像上传成功', 'data': data })
def post(self, request, house_id): # 获取数据 image = request.FILES.get('house_image') if not image: # 若是没有上传图片 return http.JsonResponse({"errno": RET.PARAMERR, "errmsg": "参数错误"}) # 验证上传的文件是否是图片 if not image_file(image): return http.JsonResponse({"errno": RET.PARAMERR, "errmsg": "参数错误"}) # 验证房屋是否存在 try: house = House.objects.get(id=house_id) except DatabaseError as e: logger.error(e) return http.JsonResponse({"errno": RET.NODATA, "errmsg": "该房间不存在"}) file_data = image.read() # 验证通过 上传文件到七牛云 try: key = storage(file_data) except Exception as e: logger.error(e) return http.JsonResponse({ "errno": RET.THIRDERR, "errmsg": "上传图片失败" }) # 保存图片到数据库 需要操作的数据库有 house 保存房屋的 主图片 以及 房屋图片 因为操作两个数据库所以使用 事务 with transaction.atomic(): save_id = transaction.savepoint() try: # 判断 house中的 主图片是否有 没有的话,则添加 if not house.index_image_url: house.index_image_url = key house.save() house_image = HouseImage(house=house, url=key) house_image.save() except Exception as e: logger.error(e) transaction.savepoint_rollback(save_id) return http.JsonResponse({ "errno": RET.THIRDERR, "errmsg": "上传图片失败" }) else: transaction.savepoint_commit(save_id) data = {"url": settings.QINIU_URL + key} return http.JsonResponse({ "errno": RET.OK, "errmsg": "图片上传成功", "data": data })
def post(self, request, house_id): house_image = request.FILES.get("house_image") if not house_image: return http.JsonResponse({"errno": RET.PARAMERR, "errmsg": "参数错误"}) if not image_file(house_image): return http.JsonResponse({"errno": RET.PARAMERR, "errmsg": "参数错误"}) try: house = House.objects.get(id=house_id) except Exception as e: logger.error(e) return http.JsonResponse({"errno": RET.NODATA, "errmsg": "该房间不存在"}) # 读取出文件对象的二进制数据 house_image_data = house_image.read() # try: # TODO:没有做异步处理 key = storage(house_image_data) except Exception as e: logger.error(e) return http.JsonResponse({ "errno": RET.THIRDERR, "errmsg": "上传图片失败" }) with transaction.atomic(): save_id = transaction.savepoint() try: if not house.index_image_url: house.index_image_url = key house.save() house_image = HouseImage() house_image.house = house house_image.url = key house_image.save() except Exception as e: logger.error(e) transaction.savepoint_rollback(save_id) transaction.savepoint_commit(save_id) data = {"url": settings.QINIU_URL + key} return http.JsonResponse({ "errno": RET.OK, "errmsg": "OK", "data": data })
def post(self, request): # 1、接收参数 avatar = request.FILES.get("avatar") if not avatar: return http.JsonResponse({"errno": RET.PARAMERR, "errmsg": "参数错误"}) if not image_file(avatar): return http.JsonResponse({"errno": RET.PARAMERR, "errmsg": "参数错误"}) # 读取出文件对象的二进制数据 file_data = avatar.read() # try: key = storage(file_data) except Exception as e: logger.error(e) return http.JsonResponse({ "errno": RET.THIRDERR, "errmsg": "上传图片失败" }) try: request.user.avatar = key request.user.save() except DatabaseError as e: logger.error(e) return http.JsonResponse({ "errno": RET.SERVERERR, "errmsg": "图片保存失败" }) data = {"avatar_url": settings.QINIU_URL + key} return http.JsonResponse({ "errno": RET.OK, "errmsg": "OK", "data": data })
def post(self, request, house_id): house_image = request.FILES.get('house_image') if not house_image: return http.JsonResponse({'errno': RET.PARAMERR, 'errmsg': '参数错误'}) if not image_file(house_image): return http.JsonResponse({'errno': RET.PARAMERR, 'errmsg': '参数错误'}) try: house = House.objects.get(id=house_id) except Exception as e: logger.error(e) return http.JsonResponse({'errno': RET.NODATA, 'errmsg': '房间不存在'}) # 读取文件的二进制数据 house_image_data = house_image.read() try: key = storage(house_image_data) except Exception as e: logger.error(e) return http.JsonResponse({'errno': RET.THIRDERR, 'errmsg': '图片上传失败'}) with transaction.atomic(): save_id = transaction.savepoint() try: if not house.index_image_url: house.index_image_url = key house.save() house_image = HouseImage() house_image.house = house house_image.url = key house_image.save() except Exception as e: logger.error(e) transaction.savepoint_rollback(save_id) transaction.savepoint_commit(save_id) data = { 'url': settings.QINIU_URL + key } return http.JsonResponse({'errno': RET.OK, 'errmsg': 'OK', 'data': data})