1

我在生产站点中使用 Django Flatpages。我想找出最好的方法来确保管理员在编辑文件时出错,可以检索旧版本的页面。我们有备份等,但恢复起来有点麻烦(即涉及系统管理员,而不是网站编辑器)。

首先,是否有一个包可以做到这一点?我不需要将所有 db 更改归档到文件系统或 MongelDB 的东西,但可能需要 Flatpages 附加组件。

如果没有,我想出了两个选择:

  1. 只需有一个登台服务器,所有实时更改都会发生,然后在生产中加载

    Django 平板备份?

  2. 一些监视 DB 的外部脚本,并在看到 Flatpages 内容的更改后,将最新内容的副本保存在其他一些表中,例如 FlatpagesHistory。然后网站编辑器可以使用管理服务从 FlatpagesHistory 中检索页面的旧副本。有人做过吗?

感谢您的反馈。

谢谢。

4

2 回答 2

3

尝试 django-reversion https://github.com/etianen/django-reversion

于 2011-03-05T05:55:40.827 回答
1

没有得到回应,所以我挖了一下。事实证明,您可以很容易地实现这一点。

创建一个这样的模型:

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)
于 2010-08-18T19:29:16.317 回答