【问题标题】:django admin post processing of uploaded filedjango admin 上传文件的后期处理
【发布时间】:2011-09-16 21:07:43
【问题描述】:

我有一个标准的 Django 管理页面,用于上传多个文件。我希望做到以下几点:

  1. 直接上传部分文件
  2. 保存前需要使用 AES 加密一个文件(可以通过 python 或通过 http 到加密服务器进行加密。)
  3. 需要解压缩、处理和重新打包的 zip 文件。

我现在只有一个非常基本的管理页面。谁能指出我从哪里开始的正确方向?请准确指出我需要修改哪个文件,因为我仍然不熟悉 django。

我们将不胜感激。谢谢。

【问题讨论】:

    标签: django file-upload django-admin


    【解决方案1】:

    一些选项是:

    1. 编写 crontab 作业来处理文件并更新“已处理”字段
    2. custom upload handler(高级)

    对于可能冗长/缓慢的操作,我会选择选项 1。如果您已经具备 mad^H^H^H 良好的 Python 技能,那么 #2 会很有趣。

    【讨论】:

      【解决方案2】:

      我没有测试这些代码,但我可以指导您从哪里开始。 我建议您在模型的保存功能处编写解压缩代码。这是最简单的方法,但不是最好的。 django admin 可以像自定义 django admin 一样处理多种表单。

      我希望你的模型有点像这些

      from django.db import models
      from django.core.files.storage import FileSystemStorage
      
      fs = FileSystemStorage(location="/var/www/yoursite/private/")
      
      class SetOfFiles(models.Model):
          name = models.CharField('set name'), max_length=225, null=False, blank=False)
      
      class File(models.Model):
          set = models.ForeignKey(SetOfFiles, verbose_name=_('set'))
          file = models.FileField(storage=fs)
      
          def save(self, *args, **kwargs):
              if not self.id:
                  ... unzip your file ...
                  ... encrypt your file if necessary ...
              super(File, self).save(*args, **kwargs)
      

      在相关应用中创建 admin.py 自定义您的管理员以处理多次插入:

      from django.contrib import admin
      class FileInline(admin.TabularInline):
          model = File
      class SetOfFilesAdmin(admin.ModelAdmin):
          list_display = ('name',)
          inlines = [FileInline]
      admin.site.register(SetOfFiles, SetOfFilesAdmin)
      

      这里也是Unzip a .zip file uploaded with FileBrowser 代码,但由于使用 FileBrowser 应用程序,它可能有点复杂。您可以使用zipfile python module 解压缩文件。 您也可以在 AES 加密时使用PyCrypto

      【讨论】:

        猜你喜欢
        • 2011-08-15
        • 2012-05-20
        • 2014-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-24
        • 2011-08-17
        相关资源
        最近更新 更多