10

我看到的每个 CGI/Perl 示例基本上都是一堆包含 HTML 的打印语句,这似乎不是编写 CGI 应用程序的最佳方式。有一个更好的方法吗?谢谢。

编辑:我决定使用 CGI::Application 和 HTML::Template,并使用以下教程:http://docs.google.com/View?docid=dd363fg9_77gb4hdh7b。谢谢!

4

6 回答 6

17

绝对是(您可能正在查看 90 年代的教程)。你会想要选择一个框架。在 Perl 领域,这些是最受欢迎的选择:

于 2008-11-24T16:38:20.943 回答
11

这是一个非常非常大的问题。简而言之,更好的方法称为模型/视图/控制器(又名 MVC)。使用 MVC,您的应用程序分为三个部分。

模型是您的数据和业务逻辑。它是构成应用程序核心的东西。

视图是向用户展示事物的代码。在 Web 应用程序中,这通常是某种模板系统,但也可以是 PDF 或 Excel 电子表格。基本上,它是输出。

最后,你有控制器。这负责将模型和视图放在一起。它接受用户的请求,获取相关的模型对象,并调用适当的视图。

mpeters 已经提到了几个 Perl 的 MVC 框架。您还需要选择一个模板引擎。最受欢迎的两个是Template ToolkitMason

于 2008-11-24T16:45:23.643 回答
10

暂时离开 CGI 与 MVC 框架的问题,您需要的是来自 CPAN 的输出模板模块之一。

模板工具包非常流行(CPAN 上的Template.pm) Text::Template、HTML::Template 和 HTML::Mason 也很流行。

HTML::Mason 不仅仅是一个模板模块,因此对于一个简单的 CGI 应用程序来说可能有点太重了,但是在您决定哪个最适合您的时候值得研究一下。

Text::Template 相当简单,并且在模板中使用 Perl,因此您可以循环数据并在 Perl 中执行显示逻辑。人们认为这既有利也有弊。

HTML::Template 也小而简单。它实现了自己的一组标签,用于 if/then/else 处理、变量设置和循环。就是这样。由于与 Text::Template 完全相反的原因,这被视为有利也有弊。

模板工具包 (TT) 实现了一种非常庞大的、失败的模板语言,其中包括循环和逻辑等等。

我使用了 HTML::Template 之一,发现我想要更多的功能。然后我成功地使用了 Text::Template,但发现它想要玩弄命名空间有点烦人。我开始了解并喜欢 Template Toolkit。对我来说,感觉是对的。你的旅费可能会改变。

当然,仍然有旧的“打印 HTML”方法,有时几个打印语句就足够了。但是您已经想到了将显示与主要逻辑分开的想法。这是一件好事。

这是通往模型/视图/控制器 (MVC) 之路的第一步,在其中您将数据模型和业务逻辑分开(您的代码接受输入,对其进行处理并决定需要输出的内容),您的输入/output(模板或打印语句 - HTML、PDF 等),以及连接两者的代码(CGI、CGI::Application、Catalyst MVC 框架等)。这个想法是改变你的数据结构(在模型中)不应该需要改变你的输出例程(视图)。

于 2008-11-24T18:31:50.543 回答
5

Perl5 Wiki提供了一个很好的(虽然还不完整)网络框架模板列表。

“模板” wiki 条目中链接的比较文章值得一读。我还建议阅读有关 PerlMonks 的推送式模板系统文章。

对于模板,Template Toolkit是我使用最多的工具包,强烈推荐它。还有一本O'Reilly 的书,它可能是 Perl 王国(在 Web 框架内部或外部)中最常用的模板系统。

我越来越喜欢的另一种方法是非模板“构建器”解决方案。像Template::Declare & HTML::AsSubs这样的模块符合这个要求。

于 2008-11-24T17:28:31.450 回答
4

我认为在 Framework/Roll-your-own 困境中取得适当平衡的一种解决方案是使用三个关键的 perl 模块:CGI.pmTemplate ToolkitDBI。使用这三个模块,您可以进行易于编写和维护的优雅 MVC 编程。

这三个模块都非常灵活,模板工具包 (TT) 允许您在需要时以 html、XML 甚至 pdf 格式输出数据。您还可以在 TT 中包含 perl 逻辑,甚至在其中添加您的数据库接口。这使您的 CGI 脚本非常小且易于维护,尤其是当您使用“标准”编译指示时。

它还允许您将 JavaScript 和 AJAXy 内容放入模板本身,从而模拟客户端和服务器之间的分离。

这三个模块是 CPAN 上最受欢迎的模块之一,具有出色的文档和广泛的用户群。此外,使用这些进行开发意味着一旦您对代码进行了原型设计,您就可以快速迁移到 mod_perl,从而快速过渡到 Apache 的嵌入式 perl 环境。

总而言之,一个紧凑而灵活的工具集。

于 2008-11-25T09:56:59.943 回答
2

您还可以将表示与代码分开,只使用模板系统,而​​无需引入成熟框架的所有开销。 Template Toolkit可以像Mason一样以这种方式单独使用,尽管我倾向于认为它更像是一个伪装成模板系统的框架。

但是,如果您非常热衷于将代码与演示文稿分离,请注意 TT 和 Mason 都允许(甚至鼓励,取决于您阅读的文档)将可执行代码嵌入到模板中。就个人而言,我觉得在你的 HTML 中嵌入代码并不比在你的代码中嵌入 HTML 更好,所以我倾向于选择HTML::Template

于 2008-11-24T17:34:37.163 回答