django admin发布上传文件的处理

时间:2011-06-17 03:10:39

标签: django file-upload django-admin

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

  1. 直接上传部分文件
  2. 保存之前需要使用AES加密一个文件(加密可以通过python或通过http加密到加密服务器。)
  3. 拉链文件需要解压缩,处理和重新打包。
  4. 我现在只有一个非常基本的管理页面。任何人都可以指出我从哪里开始的正确方向?请指出我需要修改哪个文件,因为我仍然不熟悉django。

    只是一个简短的方向将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:5)

我没有测试这些代码,但我可以直接指导你从哪里开始。 我建议你在模型的保存功能中编写解压缩代码。这是最简单的方法,但不是最好的方法。 Django管理员可以处理多个表单作为自定义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

答案 1 :(得分:0)

有些选择是:

  1. 编写crontab作业来处理文件并更新“已处理”字段
  2. 写一个custom upload handler(高级)
  3. 我会选择1进行潜在的冗长/慢速操作。如果你已经疯狂^ H ^ H ^ Hgood Python技能,#2很有趣。