如何在PHP-Apache-PostgreSQL站点中嵌入python脚本?

时间:2013-09-29 08:44:00

标签: php apache django python

我有一个用PHP-Apache-PostgreSQL构建的互联网站点; 我自己构建了一个python脚本,实现了图像比较算法。它返回从db。中获取的大多数相似图像。

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

  1. 创建一个php页面并与python脚本进行通信?
  2. 为Apache安装WSGI框架并创建一个python网页 我的python脚本?
  3. 安装WSGI + Django并创建一个python网页 用我的pythonscript?
  4. 使用套接字?
  5. 我尝试了前两个选项。 在php页面中,我很难用我的python脚本传递变量 使用WSGI,我必须改变我的思维方式:在php逻辑和界面混合,在python中划分。

    UPDATE :我的python脚本实现了图像比较算法。它返回从db。中获取的大多数相似图像。

1 个答案:

答案 0 :(得分:1)

在没有完全了解你的python脚本正在做什么的情况下,我会尝试让你快速了解我将在你的位置做些什么。

我对所有Web公开的应用程序使用Django。它非常适合自定义网址模式,对遗留数据的访问非常出色,与这些数据交互的orb涵盖了我在所有项目中99%的需求。

Django documentation中详细解释了设置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 inspectdb> models.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响应,更多的企业方法是使用tastypie

然后您可以使用

访问PHP中的数据
$fc = file_get_contents('http://yourdomain.com/path/to/django/my_command.php');
$django_data = json_decode(fc);