2010-08-04 2 views
0

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

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

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

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

    Django flatpages backup?

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

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

Спасибо.

ответ

0

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

Создание модели вроде этого:

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 файле, переопределить flatpage администратора, как этот

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)