- 假设大家都了解且练习了python cgi的一些基础代码,基础知识传送门 ➡️https://www.runoob.com/python/python-cgi.html
小小吐槽,可直接跳过蛤:
- 其实练习完基础代码后会发现,所谓CGI生成动态网页,其实就是把html代码塞进print('')里打印出来... 虽然是基于python可以直接进行数据库操作,但只能html->CGI->数据库单向传值,CGI生成的动态网页是可以传值,但CGI无法向html进行实时传值
- 需要先写好html再塞进print里,无法向单个html文件传值,意味着要连接数据库得在CGI中写html... 那么我为什么不直接html+css+js+jsp呢!未免也太鸡肋了叭!!
- 其实计算器也可以直接用html+css+js写!但是为了学习CGI...好了就不吐槽了,来写这个计算器吧!
最终效果
- 要写的内容有count.py及count_model.py这两个文件:
-
因为将html塞进print里代码会过于繁琐,所以尝试使用模板引擎,就是额外写一个类似组件的count_model.py文件,要使用的时候在count.py中调用就好
-
最终完成的效果,一个加法计算器:
第一步:编写模板引擎 count_model.py
- 在CGI-Executables中新建一个count_model.py文件
#头部
def start_response(resp="text/html"):
return 'Content-type:'+resp+'\n\n'
#form
def start_form(the_url="",form_type="Post"):
return '<form action="'+the_url+'"method="'+form_type+'">'
def end_form(submit_msg="Submit"):
return '<p></p><input type="submit" value="'+submit_msg+'">'
#input
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 context(word):
return word
#div块
def start_div(align,style):
return '<div align="'+align+'" style="'+style+'">'
def end_div():
return '</div>'
#图片
def img(src):
return '<img src="'+src+'">'
第二步:编写加法计算器 count.py
- 在CGI-Executables中新建一个count.py文件
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#简易加法计算器
# CGI处理模块
import cgi, cgitb
#html代码量多,使用模板引擎
from count_model import *
# 创建 FieldStorage 的实例化
form = cgi.FieldStorage()
#设定num1 + num2 = num3
num1 = form.getvalue("Num1")
num2 = form.getvalue("Num2")
num3 = None
#判断输入是否为空
if not num1 is None and not num2 is None:
num1 = int(num1)
num2 = int(num2)
num3 = num1 + num2
print(start_response())
print(start_div("center","margin-top:40px;"))
print(img("http://wx4.sinaimg.cn/large/7a876694gy1g8va7k3wskj207g07i0sx.jpg"))
print(end_div())
print(start_div("center","margin-top:60px;"))
print(start_form())
print(input_label("Num1","adder-1"))
print("+")
print(input_label("Num2","adder-2"))
print("=")
if num3 is None:
print(input_label("Num3","result","","readonly"))
else:
print(input_label("Num3","result",str(num3),"readonly"))
print(end_form())
print(end_div())
结束!
- 去运行看看吧 ➡️ http://localhost/cgi-bin/count.py