Dans le passé, j'ai créé un wiki Django, et il était assez simple de créer une table Page pour les entrées wiki actuelles, puis de stocker les anciennes révisions dans une table de révision. Plus récemment, j'ai décidé de créer un site Web sur Google App Engine, et j'ai utilisé du code wiki écrit par un autre programmeur. Parce qu'il a créé son modèle de page d'une manière compliquée (au moins pour moi) en utilisant des entités, je ne suis pas sûr de savoir comment créer la table de révision et l'intégrer à son modèle de page.Stocker des révisions wiki sur Google App Engine/Django - Modifier ce code existant
Voici le code approprié. Quelqu'un pourrait-il m'aider à écrire le modèle de révision, et intégrer l'enregistrement des révisions avec la méthode Save du modèle Page?
class Page(object):
def __init__(self, name, entity=None):
self.name = name
self.entity = entity
if entity:
self.content = entity['content']
if entity.has_key('user'):
self.user = entity['user']
else:
self.user = None
self.created = entity['created']
self.modified = entity['modified']
else:
# New pages should start out with a simple title to get the user going
now = datetime.datetime.now()
self.content = '<h1>' + cgi.escape(name) + '</h1>'
self.user = None
self.created = now
self.modified = now
def save(self):
"""Creates or edits this page in the datastore."""
now = datetime.datetime.now()
if self.entity:
entity = self.entity
else:
entity = datastore.Entity('Page')
entity['name'] = self.name
entity['created'] = now
entity['content'] = datastore_types.Text(self.content)
entity['modified'] = now
if users.GetCurrentUser():
entity['user'] = users.GetCurrentUser()
elif entity.has_key('user'):
del entity['user']
datastore.Put(entity)
Soit dit en passant, ce code provient de: http://code.google.com/p/google-app-engine-samples/downloads/list
Je suis assez inexpérimenté avec des modèles GAE Django, et le mien ont tendance à être très simple. Par exemple, voici mon modèle pour un blog Article:
class Article(db.Model):
author = db.UserProperty()
title = db.StringProperty(required=True)
text = db.TextProperty(required=True)
tags = db.StringProperty(required=True)
date_created = db.DateProperty(auto_now_add=True)
Votre modèle de données ici est raisonnable - c'est ce que j'aurais suggéré, pour la plupart. Toutefois, si vous avez retravaillé Page pour être un modèle au lieu d'utiliser le magasin de données directement, vous pouvez effectuer un traitement par lot sur la page et la révision, puis enregistrer un échange de données dans le magasin de données. –