【问题标题】:Using Ajax to load file in Django framework在 Django 框架中使用 Ajax 加载文件
【发布时间】:2015-07-23 08:02:40
【问题描述】:

我的项目正在处理 Django,有一个功能需要加载文件并在文本区域中显示文件内容。参考下面的代码。 上传一个文件,然后在“Text_To_Show”项目中显示。我不想将文件存储在服务器端或数据库中。所以我的想法是:使用 ajax 将文件(内容)发布到 view.py 然后 HTTPResponse(data) 回到页面。

form.py

class RequestForm(forms.Form):
       Text=forms.CharField(label='Text',widget=forms.Textarea(attrs{'cols':80, 'rows':8 }),max_length=2048,required=False)
       file = forms.FileField()
       Text_To_Show = forms.CharField(label='Text_To_Show',widget=forms.Textarea(attrs={readonly':True}),required=False)

views.py

        if request.is_ajax() and request.method == 'POST':
           form = RequestCertForm(request.POST,request.FILES)
           if form.has_changed():
              print request.FILES
              return HttpResponse('FileContent')

Javascript

    $(document).ready(function(){
       $("#id_file").change(function(){
          $.ajax({
            method : 'POST',
            enctype: 'multipart/form-data',
            success: function(result){
             $("#id_text_to_show").val(result);
          },
           fail: function(result){
              $("#id_text_to_show").val(result);
          }
      });
    });
  });

基于文档https://docs.djangoproject.com/en/1.8/topics/http/file-uploads/ 这需要方法“POST”和enctype:'multipart/form-data',但我的问题是为什么我无法从request.FILES获取文件内容(数据)。任何对此有过专长的人。可以告诉我吗?

【问题讨论】:

  • 您似乎没有在 ajax POST 中发送任何数据。
  • 是的,因为基于 doc ** request.FILES ** 只有在请求方法是 POST 并且发布请求的
    具有属性 enctype="multipart/form -数据”。否则, request.FILES 将为空。顺便问一下,你有什么想法通过ajax传输文件内容吗?
  • 只是一个问题,但如果您不想存储文件,为什么不在客户端直接使用 javascript 解析它?
  • 不,您还没有理解 Ajax 的工作原理。您在 JS 中执行的 POST 与表单本身的内容无关;它是完全分开的。你必须明确告诉 jQuery POST 什么数据,通常使用 data: 参数。
  • @zom-pro 是的,尝试使用 FileReader 直接解析文件。而,1,一些浏览器不支持这个Javascript API。 2、直接读取文件不安全

标签: javascript jquery python ajax django


【解决方案1】:

利用FileReader的思想直接解析文件。

【讨论】:

    猜你喜欢
    • 2017-05-22
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多