簡體   English   中英

編寫Perl CGI應用程序的最佳方法是什么?

[英]What's the best way to write a Perl CGI application?

我見過CGI / Perl的每個例子基本上是一堆包含HTML的打印語句,這似乎不是編寫CGI應用程序的最佳方式。 有一個更好的方法嗎? 謝謝。

編輯:我決定使用CGI :: Application和HTML :: Template,並使用以下教程: http://docs.google.com/View?docid=dd363fg9_77gb4hdh7b 謝謝!

絕對(你可能正在尋找90年代的教程)。 你想要選擇一個框架。 在Perl-land,這些是最受歡迎的選擇:

這是一個非常非常重要的問題。 簡而言之,更好的方法稱為模型/視圖/控制器 (又名MVC)。 使用MVC,您的應用程序分為三部分。

模型是您的數據和業務邏輯。 這是構成應用程序核心的東西。

View是用於向用戶呈現內容的代碼。 在Web應用程序中,這通常是某種模板系統,但它也可以是PDF或Excel電子表格。 基本上,它是輸出。

最后,你有控制器。 這有責任將模型和視圖放在一起。 它接受用戶的請求,獲取相關的模型對象,並調用適當的視圖。

mpeters已經為Perl提到了幾個MVC框架。 您還需要選擇一個模板引擎。 最受歡迎的兩個是Template ToolkitMason

暫時不考慮CGI與MVC框架的問題,您想要的是CPAN的輸出模板模塊之一。

Template Toolkit非常受歡迎(CPAN上的Template.pm)也很受歡迎:Text :: Template,HTML :: Template和HTML :: Mason。

HTML :: Mason不僅僅是一個模板模塊,因此對於一個簡單的CGI應用程序來說可能有點過於沉重,但是在你決定哪個最適合你時,值得研究一下。

Text :: Template相當簡單,並且在模板中使用Perl,因此您可以循環數據並在Perl中執行顯示邏輯。 這被人們視為贊成和反對。

HTML :: Template也小而簡單。 它為if / then / else處理,變量設置和循環實現了自己的一小組標簽。 而已。 由於與Text :: Template完全相反的原因,這被視為pro和con。

模板工具包(TT)實現了一個非常龐大的perlish模板語言,包括循環和邏輯等等。

我使用HTML :: Template one,發現我想要更多功能。 然后我成功使用了Text :: Template,但發現它想要命名空間有點煩人。 我已經了解並喜歡Template Toolkit。 對我來說,這感覺很對。 你的旅費可能會改變。

當然,仍然有舊的“打印HTML”方法,有時幾個打印語句就足夠了。 但是你已經想到了將顯示器與主邏輯分開的想法。 這是件好事。

這是邁向模型/視圖/控制器(MVC)的第一步,在這個過程中,您將數據模型和業務邏輯(您的代碼接受輸入,執行某些操作並確定需要輸出的內容)分開,您的輸入/ output(模板或打印語句 - HTML,PDF等),以及連接兩者的代碼(CGI,CGI :: Application,Catalyst MVC Framework等)。 我們的想法是,對數據結構的更改(在模型中)不應該要求更改輸出例程(View)。

Perl5 Wiki提供了一個很好的(雖然還沒有完整的) Web框架模板列表。

在“模板”維基條目中鏈接的比較文章值得一讀。 我還建議在PerlMonks上閱讀這個推送式模板系統文章。

對於模板,然后模板工具包是我最常用的,可以強烈推薦它。 還有一本O'Reilly書 ,可能是Perl王國中最常用的模板系統(在Web框架內部或外部)。

我越來越多地采用的另一種方法是非模板“構建器”解決方案。 Template :: DeclareHTML :: AsSubs這樣的模塊符合這個要求。

我認為在Framework / Roll-your-own困境中取得適當平衡的一個解決方案是使用三個關鍵的perl模塊: CGI.pmTemplate ToolkitDBI 使用這三個模塊,您可以進行易於編寫和維護的優雅MVC編程。

所有這三個模塊都非常靈活,使用Template Toolkit(TT),您可以根據需要以html,XML甚至pdf格式輸出數據。 您還可以在TT中包含perl邏輯,甚至可以在那里添加數據庫接口。 這使得您的CGI腳本非常小並且易於維護,尤其是在使用“標准”編譯指示時。

它還允許您將JavaScript和AJAXy內容放入模板本身,模仿客戶端和服務器之間的分離。

這三個模塊是CPAN中最受歡迎的模塊,具有出色的文檔和廣泛的用戶群。 再加上使用這些方法進行開發,一旦您編寫了代碼原型,就可以快速轉移到mod_perl,從而快速過渡到Apache的嵌入式perl環境。

總而言之,這是一款緊湊而靈活的工具集。

您還可以將表示與代碼分開,只需使用模板系統,而​​無需引入完整框架的所有開銷。 模板工具包可以以這種方式單獨使用,就像梅森一樣 ,盡管我傾向於認為它更像是一個偽裝成模板系統的框架。

但是,如果您真的想要將代碼與表示分離,請注意TT和Mason都允許(甚至鼓勵,根據您閱讀的文檔)可執行代碼嵌入到模板中。 就個人而言,我覺得在HTML中嵌入代碼並不比在代碼中嵌入HTML更好,所以我傾向於選擇HTML :: Template

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM