複数のチームが解析されるコンテンツをアップロードするDjangoアプリがあります。アプリは、解析されたコンテンツの特定の一般的な情報を追跡します。ここでの問題は、コンテンツが異なる形式であるため、各チームに異なるパーサーで解析する必要のあるコンテンツがあることです(たとえば、一部のチームにはXMLコンテンツ、一部にはテキスト、一部にはJSONなどがあります)。各チームは、解析後に対応するDjangoモデルに配置される必要な情報を取得するパーサー(Pythonモジュール)を提供しています。
私の質問は、各チームが独自のパーサーを正しくセットアップできるDjangoでこれを設計するための最良の方法は何ですか?純粋にバックエンドにすることができ、ユーザーフォームなどは必要ありません。私の最初の考えは、次のParser
ように各チームにForeignKeyを使用してモデルを作成することでした。
class Parser(models.Model):
team = models.ForeignKey('Team')
module_path = models.CharField(max_length=..., blank=False)
module_path
これは「parsers.teamA.XMLparser」のようなもので、次のようにそのパスのアプリコードに存在します。
parsers/
teamA/
__init__.py
XMLparser.py
teamB/
次に、アップロードされたコンテンツをアプリが解析するようになると、次のようになります。
team = Team.objects.get(id=team_id)
parser = Parser.objects.get(team=team)
theParser = __import__(parser.module_path)
theParser.parse(theStuffToBeParsed)
誰もがこれに関してどのような問題を見ていますか?私が考えることができる他の唯一のオプションは、パーサーごとに個別のDjangoアプリを作成することですが、どのチームがデータベース内のどのアプリを使用しているかをどのように参照しますか(ここで行ったのと同じですか?)?