【问题标题】:How can i embed a python script in my PHP-Apache-PostgreSQL site?如何在我的 PHP-Apache-PostgreSQL 站点中嵌入 python 脚本?
【发布时间】:2013-10-05 06:58:02
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php apache django python


    【解决方案1】:

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

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

    设置 Django 以在 apache 中运行在 Django documentation 中有详细说明。一旦你的新站点启动并与你的 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2021-11-12
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多