まず第一に、あなたは少し車輪の再発明をしているように思えます...ほとんどのPython Webフレームワーク(CherryPy / TurboGearsは私が知っているものです)には、URLの内容に基づいて特定のクラスにリクエストをディスパッチする方法がすでに含まれています、またはユーザー入力。
実際、あなたのやり方には何の問題もありませんが、私の経験では、それはあなたのプログラムにある種の「抽象化の欠如」を示している傾向があります。基本的に、Pythonインタープリターを使用して、自分で保存するのではなく、必要になる可能性のあるオブジェクトのリストを保存します。
したがって、最初のステップとして、呼び出したいすべてのクラスの辞書を作成することをお勧めします。
dispatch = {'Foo': Foo, 'Bar': Bar, 'Bizbaz': Bizbaz}
最初は、これはあまり違いはありません。ただし、Webアプリが大きくなると、いくつかの利点があります。(a)名前空間の衝突に遭遇しない、(b)使用globals()
すると、セキュリティ上の問題が発生する可能性があり、攻撃者は、本質的に、プログラム内のグローバルシンボルにアクセスできます。彼らはあなたのプログラムに任意のものを注入する方法を見つけることができますclassname
、(c)あなたがclassname
実際の正確なクラス名以外のものになりたい場合は、あなた自身の辞書を使用する方がより柔軟になります、(d)あなたはdispatch
辞書を必要に応じてデータベースアクセスなどを行う、より柔軟なユーザー定義クラス。
セキュリティの問題は、Webアプリで特に顕著です。Webフォームから入力されたglobals()[variable]
場所を実行することは、問題を抱えているだけです。variable