你的第一个 Python CGI 网站
对于制作他们的第一个 Web 服务器的人,我将这个简单的示例与使其工作所需的所有步骤放在一起。有两个文件需要创建。首先,server.py是运行 Web 服务器的脚本。第二个是服务器将运行的 Python CGI 脚本并将其输出作为“网页”发送到浏览器。
首先为服务器创建一个项目文件夹,比如你的主目录中的simple_server,或者你想放置项目的任何地方。
在该文件夹中创建一个名为cgi-bin的子文件夹。然后将第一个脚本复制到文件server.py并将其放在simple_server中。然后创建文件my_cgi_script.py并将其放在cgi-bin文件夹中。这些文件位于本指南正文的下方。
目录结构应如下所示:
|
-- [simple_server]
|
-- server.py
|
-- [cgi-bin]
|
-- my_cgi_script.py
您需要在my_cgi_script.py上设置权限以使其可执行 - 否则 Web 服务器无法运行它来生成网页输出。如果您使用的是 Linux 或 MacOS,请在命令 shell 中输入:
$ chmod +x cgi-bin/my_cgi_script.py
在 Windows 上,使用文件资源管理器找到文件并右键单击它,并确保其权限允许执行。
打开命令外壳,cd
进入simple_server文件夹并执行server.py脚本:
$ cd simple_server
$ python server.py
到目前为止,它应该静默运行,没有任何输出。然后在您喜欢的浏览器的新选项卡中,浏览到此 URL:
http://localhost:8000/cgi-bin/my_cgi_script.py
“你好世界!” 应该出现在浏览器中,并带有很多空白作为网页(如果您没有立即看到它,请在左上角查找它)。在那里,你做到了!你已经用 Python CGI 创建了你的第一个网站!
服务器.py
from http.server import HTTPServer, CGIHTTPRequestHandler
if __name__ == '__main__':
try:
CGIHTTPRequestHandler.cgi_directories = ['/cgi-bin']
httpd = HTTPServer(('', 8000), # localhost:8000
CGIHTTPRequestHandler) # CGI support.
print(f"Running server. Use [ctrl]-c to terminate.")
httpd.serve_forever()
except KeyboardInterrupt:
print(f"\nReceived keyboard interrupt. Shutting down server.")
httpd.socket.close()
cgi-bin/my_cgi_script.py
#!/usr/bin/env python
# The line above ^ is important. Don't leave it out. It should be at the
# top of the file.
import cgi, cgitb # Not used, but will be needed later.
print("Content-type: text/html\n\n")
print("hello world!")
如果你让它运行起来,你可能想知道“刚刚发生了什么?” server.py设置并运行 Web 服务器。它被配置为使用CGIHTTPRequestHandler
. 此请求处理程序将cgi-bin文件夹中的文件作为脚本运行。它使用命令外壳来执行此操作。
在my_cgi_script.py的顶部,该#!/usr/bin/env python
行告诉命令 shell 使用 Python 解释器执行文件中的代码。
服务器将您在浏览器中输入的 URL 理解为文件的路径 - 在本例中是cgi-bin文件夹下的 CGI 脚本my_cgi_script.py:http://localhost:8000/cgi-bin/my_cgi_script.py
如果您查看服务器正在运行的命令 shell,您可以看到详细说明它处理的 Web 流量的消息。每次访问此服务器进程时,它都会输出更多消息 - 继续尝试在浏览器中刷新并观看它。
您现在可以修改my_cgi_script.py以输出更多文本,或者您可以让它输出 HTML 标记并生成更有趣的网页。
要创建一个包含 CGI 脚本的网页,请创建一个名为index.html的文件并将其放在server.py文件夹中- index.html的内容如下。
索引.html
<!DOCTYPE html>
<html>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
<!-- Simple example to include text from the CGI script in this web page. -->
<object type="text/html" data="/cgi-bin/my_cgi_script.py"></object>
</body>
</html>
目录结构现在应该如下所示:
|
-- [simple_server]
|
-- server.py
|
-- index.html
|
-- [cgi-bin]
|
-- my_cgi_script.py
完成后,如果您停止了服务器进程,请再次启动它并尝试浏览http://localhost:8000
并验证您是否看到“hello world!” 在“我的第一段”下方。index.html是 Web 服务器用作其 URL 的默认页面的特殊文件名。现在您已经具备了创建出色网站的所有基础知识!
展望未来,对于学习或认真开发的最佳 Web 开发框架应该是什么,存在各种意见。从这个示例中,您应该对非常基本的配置、设置和浏览器/服务器交互有所了解。
所以现在,问题是从这里去哪里?您可以继续追求上述模型,并学习如何使用 Python CGI 脚本将更多功能放入基本站点,并将它们绑定到 HTML 页面中的表单动作。那将是一条完全有效的路径,您可能会学到很多东西。
有人向我推荐了一个使用名为 Django 的生产级 Web 服务器的好站点。据我所知,它有非常好的教程和其他资源来帮助您开始 Web 开发。
该网站是 Django Girls Tutorial。不要被网站的名称吓到,任何人都可以从本教程中受益,它很好地介绍了使用 Django 进行 Web 开发所需的工具和技术。
Django Girls 是一个活跃的女性开发者社区,在世界各地举办活动,并将她们与其他可以帮助她们进步的人联系起来。
Django 女孩教程:https ://tutorial.djangogirls.org/en/
更深入的 Python CGI 示例:https ://www.tutorialspoint.com/python/python_cgi_programming.htm
对于学习 HTML,这个网站有很好的教程:https ://www.w3schools.com/html/default.asp
CGI 支持模块的参考,cgi:https ://docs.python.org/3/library/cgi.html
包含此示例中使用的类的文档可在以下位置找到:https ://docs.python.org/2/library/internet.html