这两天学了python cgi编程,挺好玩的 跟大家分享一下:
目标:
创建一个cgi脚本 接收来访者的参数
步骤:
创建一个cgi服务的根目录(随便创建,然后在终端或者cmd下切换到该目录下)
python2.x的httpserver启动:python -m CGIHTTPServer 13333 会启动http server 在13333端口上
python3.x的httpserver启动:python -m http.server --cgi 13333 这个--cgi不可以拿掉 否则cgi脚本运行不了
然后这个时候 你就可以创建一个比如index.html 测试一下 访问了
接下来 创建cgi-bin 目录 在当前目录下(目录名必须是这个,cgi脚本就放在这个目录下),此时相对于http服务来说 根目录还是上一层的目录
可以创建一个index.py在cgi-bin下,内容:
#!/usr/bin/env python import cgi #内置模块 html=‘‘‘ <html> <head> </head> <body> <form method="POST"> <input type="text" name="name"> <input type="text" name="age"> <input type="submit" name="return"> </form> <b>My name is %s , I‘m %s years old .</b> </body> </html> ‘‘‘ print("Content-Type:text/html") #header print() #声明header结束 f=cgi.FieldStorage() #cgi的一个类 用来接收参数的 try: print(html%(f[‘name‘].value,f["age"].value)) except: print(html%(‘\t‘,‘\t‘))
效果会在你访问的时候出现两个文本框:
有几个坑:一个是python的cgi模块的启动位置 一定要是在cgi-bin的上层目录下;
其次是index.py一定是在cgi-bin下才行 而且权限不足的话会报错;三是在实例化cgi的fieldstorage类的时候,注意别声明多次,比如我在上边的代码的try那里才去实例化,类似这样:
try :
print(html%(cgi.FieldStorage["name"].value,cgi.FieldStorage["age"].value)
except......
这样写的结果会什么都不显示 因为第一次实例化会传递数据 但是第二次的时候没有提交的结果了,所以会有可能神马都不显示或者只显示一个;
最后就是注意这个:
print("Content-Type:text/html")
print()
这个一定要写上,这个是声明头部和头部结束的,不写有问题;暂时我也就总结这么多~
跟我一起来一句英文吧:
It always seems impossible until its done
成功之前,一切看起来都是不可能的