代码之家  ›  专栏  ›  技术社区  ›  OverClocked

在生产中使用Django Flatpages:如何存档更改以进行恢复

  •  0
  • OverClocked  · 技术社区  · 14 年前

    我在一个制作网站上使用django平面页面。我想找出最好的方法,以确保管理员在编辑文件时出错,可以检索到页面的旧版本。我们有备份等等,但是恢复起来有点麻烦(例如涉及系统管理员,而不是网站编辑器)。

    首先,有这样的包装吗?我不需要将所有数据库更改归档到文件系统或Mongeldb,但可能需要一个Flatpages插件。

    如果不是,我想出了两个备选方案:

    1. 只要有一个临时服务器,在那里所有的实时更改都会发生,然后在生产中加载

      Django flatpages backup?

    2. 一些监控数据库的外部脚本,当看到对flatpages内容的更改时,将最新内容的副本保存在其他一些表中,如flatpageshistory。然后,网站编辑器就可以使用管理服务从flatpageshistory中检索页面的旧副本。有人这样做吗?

    感谢您的反馈。

    谢谢。

    2 回复  |  直到 13 年前
        1
  •  3
  •   jtinsky    13 年前
        2
  •  0
  •   OverClocked    14 年前

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

    创建这样的模型:

    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 admin

    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)
    

    您可以为旧页面提供“只读”管理界面,如下所示

    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)
    
    推荐文章