Skip to main content
 首页 » 编程设计

python之django imagefield 上传总是提示没有选择文件

2024年11月01日31grandyang

我尝试通过以下方式创建个人资料图片上传字段:

class SignUpForm(forms.Form): 
    username = forms.CharField(max_length=30, \ 
        error_messages = {'required': 'Need a username'}) 
    email = forms.EmailField(max_length=30, \ 
        error_messages = {'required': 'Need an email', 'invalid': 'Email is invalid'}) 
    profile_image = forms.ImageField(error_messages = {'required': 'Please select a profile image'}) 

并在 views.py 中加载数据:

  if request.method != 'POST': 
    return HttpResponseServerError("Only POST requests allowed.") 
  form = SignUpForm(request.POST, request.FILES) 
  logger.info(request.FILES) # this always prints empty '{}' 

形式是:

form(enctype="multipart/form-data", method='post') 
      label(for='username') Username 
      input#name(name='username', type='text') 
      label(for='email') Email 
      input#email(name='email', type='email') 
      label(for='profile_image') Profile Image 
      input#profile_image(name='profile_image', type='file') 

我提交数据的方式是在js中:

$('form').submit(function(e){ 
  e.preventDefault(); 
  $("#signup-errors").hide(); 
  var form = $(e.target); 
  var post = $.post('/user/create/', form.serialize(), redirectIfSuccess); 
  post.fail(function(xhr, ajaxOptions, thrownError) { 
    $("#signup-errors").html(xhr.getResponseHeader("errors")).show(); 
  }); 
}); 

谁能告诉我哪里出了问题?我已经搜索并按照步骤操作,但文件从未通过...发布:(

谢谢!

请您参考如下方法:

根据您的更新,问题是您使用的是 AJAX。

异步上传文件并不“容易”。它受 HTLM5 支持,但并非所有浏览器都支持 - 您绝对不能依赖此方法。

How can I upload files asynchronously?

我建议他们使用一些 ajax 文件上传插件(使用 iframe 或 flash)并使用他们的 API 来完成您的 POST。

http://blueimp.github.io/jQuery-File-Upload/