J'ai une application Django où plusieurs équipes téléchargent du contenu qui sera analysé. L'application conserve une trace de certaines informations communes dans le contenu analysé. Le problème ici est que chaque équipe a un contenu qui doit être analysé par un analyseur différent, car le contenu est dans un format différent (par exemple, certaines équipes ont un contenu XML, d'autres ont du texte, d'autres ont JSON, etc ...). Chacune des équipes a fourni un analyseur (un module python) qui saisit les informations nécessaires qui sont placées dans les modèles Django correspondants après l'analyse.Django: des applications dépendantes du modèle à partir de l'utilisateur
Ma question est la suivante: quelle est la meilleure façon d'architecturer ceci dans Django où chaque équipe peut avoir sa propre configuration d'analyseur? Il peut être purement backend, pas besoin d'un formulaire utilisateur ou quelque chose comme ça. Ma première pensée était que je créerais un modèle Parser
avec ForeignKey à chaque équipe comme ceci:
class Parser(models.Model):
team = models.ForeignKey('Team')
module_path = models.CharField(max_length=..., blank=False)
et que module_path
serait quelque chose comme « parsers.teamA.XMLparser » qui résiderait dans mon code d'application dans cette voie comme ceci:
parsers/
teamA/
__init__.py
XMLparser.py
teamB/
Puis, quand mon application vient pour analyser le contenu téléchargé, j'aurais ceci:
team = Team.objects.get(id=team_id)
parser = Parser.objects.get(team=team)
theParser = __import__(parser.module_path)
theParser.parse(theStuffToBeParsed)
Quels sont les problèmes Quelqu'un voit-il avec ça? La seule autre option que je peux penser est de créer des applications Django séparées pour chaque analyseur, mais comment puis-je référencer quelle équipe utilise quelle application dans la base de données (même chose que fait ici?)?
@ John, merci pour le conseil. Je suis curieux de savoir ce que vous voulez dire par le champ personnalisé pour représenter le chemin du module. Comment cela serait-il fait pour gérer l'importation? – Randy
J'ai édité ma réponse pour répondre à votre suivi – John