【问题标题】:How can a Django application integrate a legacy webapp written in php [closed]Django应用程序如何集成用php编写的遗留webapp [关闭]
【发布时间】:2012-11-29 04:09:06
【问题描述】:

我正在尝试编写一个 Django webapp,并且我想保存指标显示页面 (/monitoring) 的开发——实际上,考虑到遗留的webapp's 功能/成熟度和用户,它几乎无法击败遗留的 php 实现熟悉。

我有什么办法可以将遗留的 php webapp 集成到我的 django 应用程序中?

我有点觉得this post 与我的想法有关。但是,我真的不想碰旧版 webapp 的代码,而且那里建议的方式似乎需要它。

我正在考虑的另一种方法是,我只是设置我的 apache 服务器,使其将 URL“/monitoring”定向到现有的旧 php webapp,并将其余部分定向到我的 django webapp。但是这样我就无法控制用户登录功能了,这个功能是在Django webapp中为“/monitoring”页面实现的。

【问题讨论】:

    标签: php django web-applications


    【解决方案1】:

    在我看来,您链接的帖子中提出的内容根本不好。首先,您应该考虑要集成的“什么”。

    • 行为:(功能、业务逻辑等)。
    • 结构:数据库连接、操作
    • 自定义驱动程序
    • 渲染内容。实际系统如何呈现视图/页面/任何内容并按原样显示。

    在您链接的帖子中,那个人想要集成所有内容:他只是想获取他以前在 PHP 页面中看到的内容,并像在 django 应用程序中一样显示它。老实说,这不好。我建议(仅基于个人经验)你不应该在你的 django 应用程序中集成已经渲染的页面。

    你可以做的是整合功能和行为。例如,假设您的 PHP 监控系统为您提供给定时间段内的用户数量。它有一个 PHP 函数:

    <?php
    function show_users($time_period){
       ...
    }
    ?>
    

    与其从该监控系统获取 HTML 并将其放入您的 Django 应用程序,您应该只获取行为。例如,通过 REST 接口公开您的 PHP 应用程序。因此,在您的 Django 代码中,您可以:

    # views.py
    def monitoring(request):
        users = monitoring_service('/users/2012/')
        render(request, 'monitoring.html', {'users': users}
    

    在您的模板中:

    # monitoring.html
    <ul>
    {% for user in users %}
        <li> {{user}} </li>
    {% endfor %}
    </ul>
    

    基本上,您正在重用 PHP 应用程序的功能。但是,您正在处理渲染部分。当然,这是额外的工作,但是,相信我,这是值得的。

    额外:

    我建议使用 REST,因为它是一个很好的解决方案。但您可以选择其他接口进行通信,例如 Thrift、Protocol Buffers 或 MessagePack(仅举几例)

    【讨论】:

    • 我想我想整合渲染+功能。查看渲染页面OUT-OF-BOX。我希望这个页面是我的 webapp 的一个页面。
    • 但是,你想用 django 做什么?只需将 /monitoring 路由到该系统即可。
    • 我想使用 django 来实现 /login、/error_history、/configuration 之类的页面......是的,我想我希望我的 django 应用程序路由 /monitoring 到上面的开箱即用页面。但是怎么做呢?
    • 你必须在你的服务器中设置它。您可以在 Ganglia 中切换身份验证部分。这很容易。
    猜你喜欢
    • 2020-02-20
    • 2012-02-12
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2011-08-02
    • 2011-03-08
    相关资源
    最近更新 更多