Django应用程序如何集成用PHP编写的遗留Web应用程序

时间:2012-11-29 04:09:06

标签: php django web-applications

我正在尝试编写一个Django webapp,我想保存指标显示页面(/监控)的开发 - 实际上,鉴于遗留webapp's功能/成熟度,它很难打败那个遗留的php实现和用户熟悉。

有没有办法让我将遗留的php webapp集成到我的django应用程序中?

我有点觉得this post与我的想法有关。但是,我真的不想触及遗留的webapp代码,而且建议的方式似乎需要它。

我想到的另一种方法是我只是设置我的apache服务器,它将URL“/ monitoring”定向到现有的遗留php webapp,并将其余部分引导到我的django webapp。但是这样,我无法控制用户登录功能,该功能在Django webapp中为“/ monitoring”页面实现。

1 个答案:

答案 0 :(得分: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应用程序的功能。但是,你正在处理渲染部分。当然,这是一项额外的工作,但是,相信我,这是值得的。

<强> EXTRA:

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