1

本番サイトで Django Flatpages を使用しています。管理者がファイルの編集を間違えた場合に、古いバージョンのページを取得できるようにする最善の方法を見つけたいと思います。バックアップなどはありますが、そこから復元するのは少し面倒です (つまり、Web サイトの編集者ではなくシステム管理者が関与します)。

まず、これを行うパッケージはありますか? すべてのデータベースの変更をファイルシステムまたは MongelDB にアーカイブするものは必要ありませんが、おそらく Flatpages アドオンは必要です。

そうでない場合、私は2つの選択肢を思いつきました:

  1. すべてのライブ変更が発生するステージングサーバーを用意してから、本番環境にロードするだけです

    Django flatpages バックアップ?

  2. DB を監視し、Flatpages コンテンツへの変更を確認すると、FlatpagesHistory などの他のテーブルに最新のコンテンツのコピーを保存するいくつかの外部スクリプト。次に、Web サイトの編集者は Admin サービスを使用して 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 ファイルで、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)

そして、次のように、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 に答える