django администратор пост-обработки загруженного файла - PullRequest
5 голосов
/ 17 июня 2011

У меня есть стандартная страница администратора Django, которая используется для загрузки нескольких файлов. Я хочу сделать следующее:

  1. загрузить некоторые файлы напрямую
  2. Перед сохранением необходимо зашифровать один файл с помощью AES (шифрование может быть выполнено с помощью python или через http на сервере шифрования.)
  3. ZIP-файл необходимо распаковать, обработать и перепаковать.

Сейчас у меня есть только очень базовая страница администратора. Кто-нибудь может указать мне правильное направление, с чего начать? Пожалуйста, укажите, какой именно файл мне нужно изменить, так как я до сих пор незнаком с django.

Только краткое направление будет оценено. Спасибо.

Ответы [ 2 ]

5 голосов
/ 17 июня 2011

Я не тестировал этот код, но могу просто указать, с чего начать. Я бы посоветовал вам написать код распаковки в функции сохранения модели. Это самый простой способ, но не самый лучший. Администратор Django может обрабатывать несколько форм в качестве настройки администратора Django.

Я надеюсь, что ваши модели похожи на эти

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)

Здесь также Распакуйте файл .zip, загруженный с кодом FileBrowser , но это может быть немного сложнее из-за использования приложения FileBrowser. Вы можете распаковать файл, просто используя модуль Python zipfile . Также вы можете использовать PyCrypto при шифровании AES.

0 голосов
/ 17 июня 2011

Вот некоторые параметры:

  1. написать задание crontab для обработки файлов и обновить поле «обработано»
  2. написать пользовательский обработчик загрузки (дополнительно)

Я бы выбрал вариант 1 для потенциально длительных / медленных операций.Номер 2 интересен, если у вас уже есть сумасшедшие навыки ^ H ^ H ^ Hgood Python.

...