Django DRF PUT 请求 ImageField
Django DRF PUT Request ImageField
我正在使用 Django 中的 ImageField 上传图片。当我获取要在前端显示的数据时将图像保存在数据库中后,我以以下格式获取它:
{"pk":5,"employee_image":"/media/emp_temp_mast/5.png","first_name":"TEST",}
在前端更改数据后,我以以下形式为相应条目发送 PUT 请求:
{"pk":5,"employee_image":"/media/emp_temp_mast/5.png","first_name":"DATA CHANGED",}
但是我在发出请求后收到以下错误:
employee_image: ["The submitted data was not a file. Check the encoding type on the form."]
我应该如何从前端调用 PUT 请求。
@Ross Rogers 的建议奏效了,但我觉得它可能会有点乏味,因为我们希望每个客户端应用程序都知道他们必须在他们打算发出的每个更新请求中对 ImageField 进行 Nuke。客户端应该能够进行这种抽象并且不需要担心 ImageField 的处理。
为了实现这一点,我对后端接收 ImageField 的视图进行了以下更改。
class Emp_DetailView(APIView):
def get_object(self, pk):
try:
return db_data
except Emp_Mast.DoesNotExist:
raise Http404
def put(self, request, pk, format=None):
db_data = self.get_object(pk)
if(db_data["employee_image"] and db_data["employee_image"].startswith('http'))):
img_name = dataDict["employee_image"].split("/")[-1]
emp_img_temp = ContentFile(requests.get(dataDict["employee_image"]).content, name=img_name)
dataDict["employee_image"] = emp_img_temp
serializer = Emp_Mast_Serializer(db_data, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
对图像发送 GET 请求URL,然后将结果保存为可用于发送 PUT 请求的文件格式
我正在使用 Django 中的 ImageField 上传图片。当我获取要在前端显示的数据时将图像保存在数据库中后,我以以下格式获取它:
{"pk":5,"employee_image":"/media/emp_temp_mast/5.png","first_name":"TEST",}
在前端更改数据后,我以以下形式为相应条目发送 PUT 请求:
{"pk":5,"employee_image":"/media/emp_temp_mast/5.png","first_name":"DATA CHANGED",}
但是我在发出请求后收到以下错误:
employee_image: ["The submitted data was not a file. Check the encoding type on the form."]
我应该如何从前端调用 PUT 请求。
@Ross Rogers 的建议奏效了,但我觉得它可能会有点乏味,因为我们希望每个客户端应用程序都知道他们必须在他们打算发出的每个更新请求中对 ImageField 进行 Nuke。客户端应该能够进行这种抽象并且不需要担心 ImageField 的处理。
为了实现这一点,我对后端接收 ImageField 的视图进行了以下更改。
class Emp_DetailView(APIView):
def get_object(self, pk):
try:
return db_data
except Emp_Mast.DoesNotExist:
raise Http404
def put(self, request, pk, format=None):
db_data = self.get_object(pk)
if(db_data["employee_image"] and db_data["employee_image"].startswith('http'))):
img_name = dataDict["employee_image"].split("/")[-1]
emp_img_temp = ContentFile(requests.get(dataDict["employee_image"]).content, name=img_name)
dataDict["employee_image"] = emp_img_temp
serializer = Emp_Mast_Serializer(db_data, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
对图像发送 GET 请求URL,然后将结果保存为可用于发送 PUT 请求的文件格式