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 和应用程序相关的设置

我们正在考虑的解决方案是将所有 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 配置正确,一切都应该正常工作。

我唯一的评论是,同义反复,“分开的东西应该分开。”

当我遇到类似问题时,我通常会创建一个简单的 UNIX 套接字服务器(使用 Tornado),Django 可以与之通信以进行 API 调用等。

如果我需要公开套接字服务器的功能,我将投入一个廉价的 WSGI 服务器(同样,使用 Tornado)来提供请求,并将它放在我的托管配置中的不同子域下。

于 2013-02-27T21:36:45.880 回答
0

我认为我最初的问题不是很清楚。从那时起,我偶然发现了一些对我有帮助的其他答案和页面,主要是关于如何在外部模块和应用程序中重用 django 功能。

有了这些信息,我设法从应用程序根目录上的 pythonscripts(例如 module1.py)访问我的模型(在应用程序子文件夹中)。

简而言之,从 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 回答