2

我有一个用 PHP-Apache-PostgreSQL 构建的网站;我为自己构建了一个实现图像比较算法的 python 脚本。它返回从数据库中获取的最相似的图像。

现在,我必须创建一个嵌入我的 python 脚本的网页。我的问题是:哪个是最快和最简单的解决方案?

  1. 创建一个php页面并与python脚本通信?
  2. 为 Apache 安装 WSGI 框架并使用我的 python 脚本创建一个 python 网页?
  3. 安装 WSGI+ Django 并用我的 pythonscript 创建一个 python 网页?
  4. 使用插座?

我尝试了前两个选项。在一个 php 页面中,我很难与我的 python 脚本通信变量使用 WSGI,我必须改变我的思维方式:在 php 中逻辑和接口是混合的,在 python 中是分开的。

更新:我的 python 脚本实现了图像比较算法。它返回从数据库中获取的最相似的图像。

4

1 回答 1

1

在不完全了解您的 python 脚本在做什么的情况下,我将尝试让您快速了解我将在您的位置上做什么。

我将Django用于所有 Web 公开的应用程序。自定义 url 模式非常有用,对遗留数据的访问非常好,与这些数据交互的球体满足了我在所有项目中 99% 的需求。

Django 文档中详细解释了设置 Django 以在 apache 中运行。一旦您的新站点与您的 php 应用程序一起启动并运行,您就可以开始它们之间的通信。

Django 访问 PHP 数据

Django manage.py 可以根据现有表为您创建模型。在某些情况下,您可以获得现成可用的模型文件,但在大多数情况下,您需要创建自己的订单并自定义表之间的关系。将 settings.py 的数据库部分设置为指向您的 PHP 应用程序数据库。

DATABASES = {
'default': {
    'ENGINE':'django.db.backends.postgresql_psycopg2',
    'NAME': 'myphpappdbname',
    'USER': 'phpuser',
    'PASSWORD': 'phppassword'
    # snipped away other options. Might or might not bee needed
}

}

完成设置后,您可以使用以下命令测试对数据的访问权限

python manage.py dbshell

确保与数据库的正确连接后,您可以运行

python manage.py 检查数据库>模型.py

这将为您的每个表生成一个模型。将此模型文件添加到新的 django 项目中的应用程序。

python manage.py startapp phpextension
mv models.py phpextension/models.py

在设置中修改已安装的应用程序以包含新安装的应用程序,您现在可以通过 django 应用程序访问整个 PHP 应用程序数据。为您希望在网络上公开的数据创建视图。

作为补充说明,如果您想向公众伪装您正在混合 php 和 django/python,您可以使用以下内容创建您的 URL 模式:

url(r'^my_command.php$', 'phpextensions.views.my_command', name="my_command"),

为此,我认为您还需要设置设置APPEND_SLASH=False

然后,视图会将 django 视图视为另一个 php 脚本(只是更快、更优雅并注入了神奇的独角兽)。

通过 PHP 访问您的 Django 数据

在这里,我将使用 REST api。简单的方法是使用 json.dumps(my_dictionary_of_data_for_php) 在您的视图中构建 JSON 响应,而更企业化的方法是使用tastepie

然后您可以使用 PHP 访问数据

$fc = file_get_contents('http://yourdomain.com/path/to/django/my_command.php');
$django_data = json_decode(fc);
于 2013-09-29T11:20:27.717 回答