如何决定是否使用Perl CGI与常规HTML输出
我发现,在创建HTML页面时不再推荐CGI,但我对在何处使用CGI的搜索结果比答案更令人困惑 如果我的问题是基本的,我很抱歉,但我希望我的问题的答案将有助于澄清一些事情 我被告知不要创建这样的表单:如何决定是否使用Perl CGI与常规HTML输出,perl,cgi,Perl,Cgi,我发现,在创建HTML页面时不再推荐CGI,但我对在何处使用CGI的搜索结果比答案更令人困惑 如果我的问题是基本的,我很抱歉,但我希望我的问题的答案将有助于澄清一些事情 我被告知不要创建这样的表单: sub output_form { my ($q) = @_; print $q->start_form( -name => 'main', -method => 'POST', ); print $q->
sub output_form {
my ($q) = @_;
print $q->start_form(
-name => 'main',
-method => 'POST',
);
print $q->start_table;
print $q->Tr(
$q->td('Update#:'),
$q->td(
$q->textfield(-name => "update_num", -size => 02)
)
);
print $q->Tr(
$q->td('Date:'),
$q->td(
$q->textfield(-name => "date",-id => "datepicker")
)
);
print $q->Tr(
$q->td('Location:'),
$q->td(
$q->textfield(-name => "location", -size => 50)
)
);
print $q->Tr(
$q->td('Queue:'),
$q->td(
$q->textfield(-name => "queue", -size => 50)
)
);
print $q->Tr(
$q->td('ETO:'),
$q->td(
$q->textfield(-name => "eto", -size => 50)
)
);
print $q->Tr(
$q->td('CAD#:'),
$q->td(
$q->textfield(-name => "cad", -size => 50)
)
);
print $q->Tr(
$q->td('Remarks:'),
$q->td(
$q->textfield(-name => "remarks", -size => 50)
)
<html>
<head><title>What's your name?</title></head>
<body>
<form enctype="multipart/form-data">
Enter name: <input name="name" />
</form>
</body>
</html>
<html>
<head><title>Welcome [% name %]</title></head>
<body>
<h1>Hello [% name %]</h1>
<p>Pleased to meet you.</p>
</body>
</html>
但是,如果我使用常规HTML页面创建这样一个表单,我是否能够与来自Perl脚本的用户输入交互?Update
我又看了一遍你的问题,似乎你已经在CGI
提供的东西中根深蒂固,以至于你迷失了方向
但是,如果使用常规HTML页面创建这样一个表单,我是否能够与来自Perl脚本的用户输入交互
无论你的程序做什么,不管它做什么,它都必须将一个普通的HTML页面发送回发出原始请求的浏览器。各种各样的start\u表单
,start\u表
,Tr
,td
等函数都没有什么神奇之处,CGI
提供了这些函数:它应该是一种使用Perl语法生成HTML的更方便的方法
生成HTML与CGI协议无关,许多人认为在名为CGI
的模块中包含这种功能是不合适的。这就导致了一些事情,例如,它提供了类似于CGI
其他功能的发展为CGI协议提供了支持,例如
有更多的例子分别实现了原始CGI.pm
的两个方面,但是您关心的是您是否可以通过HTTP与用户交互
同样地,CGI.pm
提供的函数没有什么特别之处。您应该从命令行运行一个旧的CGI程序,以查看它只生成您在调用中指定的HTML字符串,并且您可以以任何方便的方式创建该字符串
一旦HTML被构建并发送到客户端,消息的构建方式就没有什么区别了。该页面将显示在浏览器上,它将为用户提供请求更多信息的机会
我希望这对你更清楚
查看CGI以外的选项 但您所说的是构建HTML,这与CGI无关,对该模块的一个主要批评是,它将太多的功能包装在一个框中 您应该关注使用模板包来构建HTML,其中最流行的是
您可能有额外的CSS样式和JavaScript智能,它们应该作为单独的文件从HTML链接起来。HTML构建方法总是一只丑小鸭,某种形式的模板是首选。另一方面,处理与客户机交互(CGI)的方法首先被mod_perl(它有自己的库来处理这类事情)取代,然后被Dancer和Mojolicious等框架取代
这些框架还包含模板。没有什么理由再学习旧式CGI了,除非您正在维护旧代码。舞者和魔咒营之间也有很多争论;我建议选择一个,在一个项目中学习,然后在另一个项目中学习另一个。对于要向用户显示HTML页面的浏览器,web服务器必须返回HTTP响应,其中包含正文中所需的HTML。有时HTML是从静态文件返回的,有时它是由某个服务器端应用程序生成的 浏览器并不关心(事实上,也不太可能知道)HTML是如何生成的。它只知道它收到了一个HTTP响应,该响应的内容类型为text/html,主体由需要解析和呈现的html组成 所以你有两个选择。您可以编写包含表单的静态HTML文件。或者您可以编写一个Perl程序来生成它。这两个选项对浏览器都没有影响。您已经选择编写一个Perl程序。您可以使用各种技术来实现这一点。现在我不推荐CGI(请参阅以获得一些建议),但让我们假设我们会这样做 (这里还值得指出的是,CGI协议与CGI.pm库不同,CGI.pm库通常用于编写在该协议下运行的Perl程序。您不需要使用CGI.pm来编写CGI程序。) 用于包含用于生成HTML的帮助函数的CGI.pm。它们现在已弃用,并已移动到单独的模块中。他们反对的原因有很多。最明显的一点可能是,在许多项目中,设计和实现站点前端的人员与编写后端代码的人员是不同的。如果前端开发人员已经需要了解HTML、CSS和Javascript,那么期望他们了解Perl是有点不公平的,因为他们需要Perl来使用HTML生成功能编辑网页。即使在我是唯一一个在网站上工作的人的情况下,我发现在前端和后端技术之间强制严格分离有助于保持代码更干净 所以我真的不建议使用这些函数。据我所知,没有人愿意。相反我会使用模板系统。特别是,我会使用(这是个人偏好,但是) 使用模板引擎,您可以将所有HTML代码放在一个完全独立的文件中,前端团队可以以任何方式拥有和编辑该文件。然后,当后端代码需要显示HTML页面时,可以使用模板处理功能
<html>
<head><title>Welcome [% name %]</title></head>
<body>
<h1>Hello [% name %]</h1>
<p>Pleased to meet you.</p>
</body>
</html>