-1

私は2つのモジュールを持っています。1 つは web.py に基づく Web サイトのコア (名前を付けましょうcode.py) で、もう 1 つはアドオン モジュール ( addon.py) です。web.py を使用すると、Web サイト サーバーの各ページに対して、次のようにコアにクラス定義が必要です。

class Page:  
    def GET(self):  
        variable = "Hello!"  
        return render.page_template(variable) #Here, it returns the rendered template to user  
    def POST(self):  
        post_variables = web.input()  
        pass #Doing something with those variables, maybe, writing in a database...  

code.pyここで、そのクラス定義を からに移動する必要がありますaddon.py。クラス定義addon.Pageを単に ではなくとして参照できますPage。機能はPage.GET問題なく動作しますが、POST には 1 つの問題があります。コアモジュールの POST 関数の呼び出しごとに、web.input()すべての変数を格納するストレージオブジェクトとして設定されているようです。また、クラス定義がアドオンに格納されている場合、コアは単に呼び出しますaddon.Page.POST()(この動作を変更する方法はありません)。はPOST()取得を試みweb.input()ますが、もちろん失敗します -webは にインポートされません。インポートされていたとしても、 web-server が取得addon.pyする値はありません。空の辞書であり、モジュールの別のインスタンスにすぎません。 web.py. だから私は知らない...
1つの解決策は、ある種の関数を に入れることaddon.Page.POST()です。この関数は、1 つ下のレベルに移動し、そこでcode.pyを実行し、親モジュールの名前空間に何らかのアクセスを行う (実行してアクセスするweb.input(など) に戻します (私が知っているように、これは推奨されません)。 または、たとえば、次のようにモジュール間で共有される C のようなポインターを配置します。 *すべての呼び出しが code.web.input() にルーティングされるという定義が あります。から情報を得るaddon.pyimport __main____main__.web.input()

code.pycode.addon.web_input()
addon.pyaddon.web_inputcode.web.input()

この状況で私は何をしますか?複数のアドオンがあり、それぞれにクラス定義がこのアドオンに格納されており、新しいモジュールを追加したり、既存のモジュールを簡単に接続および切断したりできます。変更する必要はありませんcode.py。これはPythonで可能だと思います...web.pyソースを変更する必要があるのでしょうか?

4

1 に答える 1