Jquery 如何使用ajax将包含图像的表单提交给Django rest框架?

Jquery 如何使用ajax将包含图像的表单提交给Django rest框架?,jquery,ajax,django,django-rest-framework,Jquery,Ajax,Django,Django Rest Framework,你能看出我做错了什么吗 以下是在模板标记中创建的表单: @register.simple_tag(takes_context=True) def add_picture_upload(context,textarea_id): a = """<form style="display:none; visibility:hidden;" id="add_image_form" action="/fotos/upload/" method="post" enctype="multipart/

你能看出我做错了什么吗

以下是在模板标记中创建的表单:

@register.simple_tag(takes_context=True)
def add_picture_upload(context,textarea_id):
  a = """<form style="display:none; visibility:hidden;" id="add_image_form" action="/fotos/upload/" method="post" enctype="multipart/form-data" >""" 
  b = """</form>"""
  form = PictureForm()
  return a+str(form)+b
这里是ajax请求:

function api_create(content_name, data_dict) {
  var req = $.ajax({
      url: '/api/'+content_name+'/',
      contentType:"application/json",
      dataType: "json",
      data: data_dict,
      processData: false,
      type: 'POST'
  }).fail(function(jqXHR, status, err){
    // fail
  })
  return req;
}
它给了我:

详细信息:JSON解析错误-“utf8”编解码器无法在中解码字节0xff 位置148:起始字节无效

或者如果我改为JSON.stringify数据,我会得到:

image_字段:[未提交任何文件。]

你有什么建议或网站有一个有效的例子吗?我知道很多人都在努力解决这个问题,但这里的所有其他问题都不会带来任何结果


谢谢您的时间。

与流行的观点相反,使用JSON上传文件,这样Django就可以识别文件,而无需对其进行黑客攻击。这是因为,所以您必须自己处理文件序列化和上载

但你有几个选择

与元数据分开处理文件上载。这将需要文件和元数据的独立端点,类似于Dropbox处理和的方式。 Base64在上载文件时对其进行编码,并使用自定义Base64FileField来处理这些文件。drf extras提供了一个可以使用的。 可能重复的
function api_create(content_name, data_dict) {
  var req = $.ajax({
      url: '/api/'+content_name+'/',
      contentType:"application/json",
      dataType: "json",
      data: data_dict,
      processData: false,
      type: 'POST'
  }).fail(function(jqXHR, status, err){
    // fail
  })
  return req;
}