Использование Django Flatpages в работе: как архивировать изменения в целях восстановления - PullRequest
1 голос
/ 04 августа 2010

Я использую Django Flatpages на производственной площадке. Я хотел бы найти лучший способ убедиться, что если администратор допустил ошибку при редактировании файла, можно восстановить старую версию страницы. У нас есть резервные копии и тому подобное, но восстановить их немного сложнее (т. Е. Задействует системного администратора, а не редактора веб-сайта).

Во-первых, есть ли пакет, который делает это? Мне не нужно что-то, что архивирует все изменения БД в файловой системе или MongelDB, но, возможно, дополнение Flatpages.

Если нет, я предложил две альтернативы:

  1. Просто имейте промежуточный сервер, на котором происходят все живые изменения, и загружайте на производство

    Резервное копирование плоских страниц Django?

  2. Некоторые внешние сценарии, которые отслеживают БД и, увидев изменения содержимого Flatpages, сохраняют копию последнего содержимого в другой таблице, например FlatpagesHistory. Тогда редактор сайта может просто использовать сервис Admin для извлечения старых копий страниц из FlatpagesHistory. Кто-нибудь делал это?

Я ценю ваши отзывы.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 05 марта 2011

Попробуйте джанго-реверсию https://github.com/etianen/django-reversion

1 голос
/ 18 августа 2010

Не получил ответа, поэтому я немного копал. Оказывается, вы можете просто реализовать это очень легко.

Создайте такую ​​модель:

class OldPage(models.Model):
    """
    Keep old contents from flatpages.
    """
    url = models.CharField('URL',max_length=100, db_index=True)
    title = models.CharField(max_length=200)
    content = models.TextField(blank=True)
    mtime = models.DateTimeField('Modified', db_index=True, auto_now_add=True)
    user = models.ForeignKey(django.contrib.auth.models.User)

Затем в файле admin.py переопределите администратора плоской страницы, как это

class MyFlatPageAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        """save a copy of the Flatpage to OldPage"""
        history = OldPage()
        history.url = obj.url
        history.title = obj.title
        history.content = obj.content
        history.user = request.user
        history.save()
        obj.save()

admin.site.unregister(FlatPage)
admin.site.register(FlatPage, MyFlatPageAdmin)

И вы можете иметь административный интерфейс «только для чтения» для вашего OldPage, например:

class OldPageAdmin(admin.ModelAdmin):
    readonly_fields = ('url','title','content','mtime','user')
    list_display = ('url','mtime','user','title')
    date_hierarchy = 'mtime'

admin.site.register(lims.pages.models.OldPage, OldPageAdmin)
...