1. 前言
最近在看python web 开发的一些内容, 正好看到了cgi, 这里做一些记录
2. cgi 介绍
全名是通用网关接口, 他可以由很多语言来实现, 只要这个语言可以进行基本的输入输出即可。 个人感觉是, 只需要这个语言可以输出 html 语言, 就可以用来编写 cgi。
cgi 的基本处理流程
[1]
:
⑴通过Internet把用户请求送到web服务器。
⑵web服务器接收用户请求并交给CGI程序处理。
⑶CGI程序把处理结果传送给web服务器。
⑷web服务器把结果送回到用户。
3. 一些注意事项
- 创建一个 main.py 文件, 同时创建一个 样式模板, 其中封装了各种html 标签
- 启动 CGI
- cmd 中输入: python CGIHTTPServer 8881
- cmd 中输入: python CGIHTTPServer 8881
- cgi 程序 一定需要放在 cgi-bin 文件夹中, 其他文件夹中将无法正常解析
4. 实现效果
5. 实现代码
main.py
# !/usr/bin env python
from style import *
import cgi, cgitb
form1 = cgi.FieldStorage()
num1 = form1.getvalue("left")
num2 = form1.getvalue("right")
num3 = None
if not num1 is None and not num2 is None:
num3 = int(num1) + int(num2)
print start_response()
print start_div()
print img("../img/yurisa.jpg", "400px")
print end_div()
print start_div()
print start_form("", "GET")
print input_label("left", "left")
print "+"
print input_label("right", "right")
print "="
if num3 is None:
print input_label("result", "result", '', "readonly")
else:
print input_label("result", "result", str(num3),"readonly")
print end_form()
print end_div()
style.py
# def functions used in cgi files
def start_response(resp = "text/html"):
return "Content-type:" + resp + "\n\n"
def img(src, height = "40px"):
return "<img src = '" + src + "' height =" + height + ">"
def start_div(align = "center", style = "margin-top:50px"):
return "<div align = '" + align + "'style = '" + style + "' >"
def end_div():
return "</div>"
def input_label(name, placeholder="", value="", readonly=None):
if readonly is None:
return "<input type = 'text' value = '" + value + "' name = '" + name + "' placeholder = '" + placeholder + "'>"
else:
return "<input type = 'text' value = '" + value + "' readonly = '" + readonly + "' name = '" + name + "' placeholder = '" + placeholder + "'>"
def start_form(url = "", form_type = "POST"):
return "<form action='" + url + "' method = '" + form_type + "'>"
def end_form(submit_msg = "submit"):
return "<input type = 'submit' value = '" + submit_msg + "'>"
6. reference
[1] CGI (通用网关接口)