1

djangoを既存のPythonアプリケーションにリンクし、このアプリケーションで定義されたモジュール、クラス、およびいくつかの構成ファイルを再利用したいと思います。すべてのモジュールは、このアプリケーションの./binディレクトリにあります。実際、アプリケーションは予測システムであり、結果を視覚化するためのフロントエンドとしてdjangoが使用されます。

現在のディレクトリ構造は次のようになります。

./application/bin/module1.py
                 /module2.py
             /config.txt
             /datadir/...
             /webresults/run1/myfig.png
                        /run2/myfig.png
                        /...

./django/manage.py
        /project1/urls.py
                 /settings.py
                 /wsgi.py
        /app1/views.py
             /models.py
             /forms.py
             /...
        /templates/base.html
                  /showResults.html
                  /...

apacheserverは、ディレクトリ./application/webresults/の静的ページと画像および/django/project1/wsgi.pyのdjangoページを提供するように設定されています。

今のところ、関連するすべてのモジュールを/ application /bin/からdjango/app1 /にコピーしたので、それらを再利用できます。views.pyとmodels.pyで。システムのメンテナンスに関しては、最適なソリューションではありません。

だから私はこれを解決するためのよりエレガントな解決策を探しています。私たちが達成したいことのいくつか:

  • バックエンドアプリケーション内を移動するのはdjangoインスタンス内を移動するよりも難しいため、望ましいdjangoが再配置されます(最も効率的な方法でコーディングされていませんでした:-))
  • djangoでアプリケーションのクラスを再利用する
  • アプリケーションでdjangoのモデルを再利用する
  • アプリケーションでSQL_objectmappingを再利用します
  • djangoとアプリケーションの両方に関連する設定に1つのconfigfileを使用する

私たちが考えている解決策は、すべてのdjangocodeを/ application / bin /にマージし、apacheconfigurationでdjangopathを再マップすることです。

./application/bin/manage.py
                 /module1.py
                 /module2.py
                 /project1/urls.py
                          /settings.py
                          /wsgi.py
                 /app1/views.py
                      /models.py
                      /forms.py
                      /...
                 /templates/base.html
                           /showResults.html
                           /...

これをどのように処理できるかについてのレシピはありますか?アドバイスをいただければ幸いです。

4

2 に答える 2

0

Djangoプロジェクトを別のモジュール内に投げても問題はありません。PYTHONPATHが正しくセットアップされ、WSGIが正しく構成されている限り、すべてが正常に機能するはずです。

私の唯一のコメントは、トートロジー的に、「別々のものは別々でなければならない」ということです。

同様の問題が発生した場合、私は通常、DjangoがAPI呼び出しなどのために通信できる単純なUNIXソケットサーバー(Tornadoを使用)を作成します。

ソケットサーバーの機能を公開する必要がある場合は、リクエストを処理する安価なWSGIサーバー(ここでもTornadoを使用)を投入し、ホスティング構成内の別のサブドメインに貼り付けます。

于 2013-02-27T21:36:45.880 に答える
0

私の最初の質問はあまり明確ではなかったと思います。それ以来、主に外部モジュールやアプリケーションでdjango機能を再利用する方法について、他の回答やページに出くわしました。

この情報を使用して、アプリケーションのルート(module1.pyなど)のpythonscriptからモデル(apps-subfolder内)にアクセスすることができました。

要するに、module1.pyからapp1.models.Mymodelにアクセスするためのコードは次のようになります。

os.environ['DJANGO_SETTINGS_MODULE'] = 'project1.settings'
from django.core.management import setup_environ
from project1 import settings
setup_environ(settings)
import app1.models

class MyChildmodel(app1.models.Mymodel):
     class Meta:
          app_label = 'app1'

     def myfunction():
          ....
于 2013-03-04T20:13:15.753 に答える