Django的模型字段实现的分块上传

时间:2016-06-23 06:37:56

标签: python django jquery-file-upload

技术问题:实现了这样一个模块字段,可以按块上传文件。

详细信息:

  1. 我知道https://github.com/blueimp/jQuery-File-Upload而我是     打算用它。
  2. 因为我没有看到Django的架构:
    • SomeModelField 类有 formfield 函数,我们可以在其中定义 'form_class',指向 SomeFormField
    • 定义 SomeFormField 具有 widget 属性,可以包含 SomeWidget
    • SomeWidget 可以包含媒体类,其中包含 js 变量,其中包含链接脚本的元组。
    • urls.py,指向一些View函数
    • 查看功能
  3. 根据我目前的理解,假设以下来源(不完整):

    1. SomeModelField Class

      class ChunkedFileField(models.FileField):
      
          def __init__(self, *args, **kwargs):
              super(ChunkedFileField, self).__init__(*args, **kwargs)
      
          description = "Chunked file"
      
          __metaclass__ = models.SubfieldBase
      
          def __init__(self, *args, **kwargs):
              kwargs['max_length'] = len(UPLOAD_TO) + 1 + FILE_NAME_MAX_LENGTH
              super(ChunkedFileField, self).__init__(*args, **kwargs)
      
          def formfield(self, form_class=None, choices_form_class=None, **kwargs):
              defaults = {'form_class': ChunkedFileFormField}
              defaults.update(kwargs)
              return super(ChunkedFileField, self).formfield(**defaults)
      
      1. SomeFormField类

        class ChunkedFileFormField(forms.FileField):
        
            widget = ChunkedFileUploadWidget
        
            def __init__(self, *args, **kwargs):
                print 'ChunkedUploadFileField'
                super(ChunkedFileFormField, self).__init__(*args, **kwargs)
        
        1. SomeWidget类

          class ChunkedFileUploadWidget(ClearableFileInput):
          
              def __init__(self, attrs=None):
                  super(ChunkedFileUploadWidget, self).__init__(attrs)
                  self.attrs['id'] = 'chunked_upload'
          
              class Media:
                  js = (
                      'js/cu.js',
                      'js/jquery.js',
                      'js/jquery.ui.widget.js',
                      'js/jquery.iframe-transport.js',
                      'js/jquery.fileupload.js',
                      'js/spark-md5.js',
                      'js/ksb_django_fields.js',
                  )
          
        2. 问题: 我是否正在为模型领域构建分块上传的正确方法?

          我不明白,我怎么能解决这种情况: 使用一组字段,其中一个是我的ChunkedFileFormField,表单的POST请求应该只发生一次,但对于我的Chunked Field,POST请求应该发生在每个chunked部分。

          如何解决这个问题?任何想法或你的实现经验都会很棒!

          P.S。:如果可以使用文章链接,代码示例或git源参考。

0 个答案:

没有答案