python 系列(14) CGI 编程

Posted on Posted in python

### 基本例子

  1. #!/usr/bin/python  
  2. # -*- coding: UTF-8 -*-  
  3.   
  4. print "Content-type:text/html"  
  5. print                               # 空行,告诉服务器结束头部  
  6. print '<html>'  
  7. print '<head>'  
  8. print '<meta charset="utf-8">'  
  9. print '<title>Hello Word - 我的第一个 CGI 程序!</title>'  
  10. print '</head>'  
  11. print '<body>'  
  12. print '<h2>Hello Word! </h2>'  
  13. print '</body>'  
  14. print '</html>'  

启动:在cgi-bin目录的上一层执行启动

  1. python -m CGIHTTPServer  

访问:

  1. http://localhost:8000/cgi-bin/hello.py  

### cgi form 表单

> 目录结构

  1. .  
  2. |-- cgi-bin  
  3. |   `-- index_get.py  
  4. `-- hello_get.html  

> hello_get.html

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <title>form</title>  
  5. </head>  
  6.   
  7. <body>  
  8. <form action="/cgi-bin/index_get.py" method="get">  
  9. name:<input type="text" name="name" />  
  10. url:<input type="text" name="url" />  
  11. <input type="submit" value="提交">  
  12. </form>  
  13. </body>  
  14. </html>  

> index_get.py

  1. #!/usr/bin/env python  
  2. import cgi  
  3.   
  4. form = cgi.FieldStorage()   #接受数据  
  5. # 获取数据  
  6. site_name = form.getvalue('name')  
  7. site_url = form.getvalue('url')  
  8.   
  9. print "Content-type:text/html"  
  10. print  
  11. print "<html>"  
  12. print "<head>"  
  13. print "<meta charset=\"utf-8\">"  
  14. print "<title>CGI</title>"  
  15. print "</head>"  
  16. print "<body>"  
  17. print "<h2>name : %s, url : %s</h2>" % (site_name, site_url)  
  18. print "</body>"  
  19. print "</html>"  

> 访问

  1. http://localhost:8000/hello_get.html  

### CGI checkbox

> 目录结构

  1. .  
  2. |-- cb.html  
  3. `-- cgi-bin  
  4.     `-- checkbox.py  

> cb.html

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <meta charset="utf-8">  
  5. <title>checkbox</title>  
  6. </head>  
  7.   
  8. <body>  
  9. <form action="/cgi-bin/checkbox.py" method="POST" target="_blank">  
  10. <input type="checkbox" name="c1" value="on" /> c1  
  11. <input type="checkbox" name="c2" value="on" /> c2  
  12. <input type="submit" value="选择" />  
  13. </form>  
  14. </body>  
  15. </html>  

> checkbox.py

  1. #!/usr/bin/python  
  2. # -*- coding: UTF-8 -*-  
  3.   
  4. # 引入 CGI 处理模块   
  5. import cgi, cgitb   
  6.   
  7. # 创建 FieldStorage的实例   
  8. form = cgi.FieldStorage()   
  9.   
  10. # 接收字段数据  
  11. if form.getvalue('c2'):  
  12.    google_flag = "是"  
  13. else:  
  14.    google_flag = "否"  
  15.   
  16. if form.getvalue('c1'):  
  17.    runoob_flag = "是"  
  18. else:  
  19.    runoob_flag = "否"  
  20.   
  21. print "Content-type:text/html"  
  22. print  
  23. print "<html>"  
  24. print "<head>"  
  25. print "<meta charset=\"utf-8\">"  
  26. print "<title>checkbox py</title>"  
  27. print "</head>"  
  28. print "<body>"  
  29. print "<h2> c1是否选择了 : %s</h2>" % runoob_flag  
  30. print "<h2> c2 是否选择了 : %s</h2>" % google_flag  
  31. print "</body>"  
  32. print "</html>"  

> 访问

  1. http://localhost:8000/cb.html  

### CGI Radio

> 目录结构

  1. .  
  2. |-- cgi-bin  
  3. |   `-- radio.py  
  4. `-- r.html  

> r.html

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <meta charset="utf-8">  
  5. <title>Radio</title>  
  6. </head>  
  7. <body>  
  8. <form action="/cgi-bin/radio.py" method="post" target="_blank">  
  9. <input type="radio" name="site" value="baidu" /> baidu  
  10. <input type="radio" name="site" value="google" /> Google  
  11. <input type="submit" value="提交" />  
  12. </form>  
  13. </body>  
  14. </html>  

> radio.py

  1. #!/usr/bin/python  
  2. # -*- coding: UTF-8 -*-  
  3.   
  4. # 引入 CGI 处理模块   
  5. import cgi, cgitb   
  6.   
  7. # 创建 FieldStorage的实例   
  8. form = cgi.FieldStorage()   
  9.   
  10. # 接收字段数据  
  11. if form.getvalue('site'):  
  12.    site = form.getvalue('site')  
  13. else:  
  14.    site = "提交数据为空"  
  15.   
  16. print "Content-type:text/html"  
  17. print  
  18. print "<html>"  
  19. print "<head>"  
  20. print "<meta charset=\"utf-8\">"  
  21. print "<title>Radio</title>"  
  22. print "</head>"  
  23. print "<body>"  
  24. print "<h2> 选中的网站是 %s</h2>" % site  
  25. print "</body>"  
  26. print "</html>"  

> 访问

  1. http://localhost:8000/r.html  

### CGT Textarea

> 目录结构

  1. .  
  2. |-- cgi-bin  
  3. |   `-- textarea.py  
  4. `-- t.html  

> t.html

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <meta charset="utf-8">  
  5. <title>CGI textarea</title>  
  6. </head>  
  7. <body>  
  8. <form action="/cgi-bin/textarea.py" method="post" target="_blank">  
  9. <textarea name="textcontent" cols="40" rows="4">  
  10. 在这里输入内容...  
  11. </textarea>  
  12. <input type="submit" value="提交" />  
  13. </form>  
  14. </body>  
  15. </html>  

> textarea.py

  1. #!/usr/bin/python  
  2. # -*- coding: UTF-8 -*-  
  3.   
  4. # 引入 CGI 处理模块   
  5. import cgi, cgitb   
  6.   
  7. # 创建 FieldStorage的实例   
  8. form = cgi.FieldStorage()   
  9.   
  10. # 接收字段数据  
  11. if form.getvalue('textcontent'):  
  12.    text_content = form.getvalue('textcontent')  
  13. else:  
  14.    text_content = "没有内容"  
  15.   
  16. print "Content-type:text/html"  
  17. print  
  18. print "<html>"  
  19. print "<head>";  
  20. print "<meta charset=\"utf-8\">"  
  21. print "<title>CGI textarea</title>"  
  22. print "</head>"  
  23. print "<body>"  
  24. print "<h2> 输入的内容是:%s</h2>" % text_content  
  25. print "</body>"  
  26. print "</html>"  

> 访问

  1. http://localhost:8000/t.html  

### CGI程序传递下拉数据

> 目录结构

  1. .  
  2. |-- cgi-bin  
  3. |   `-- dropdown.py  
  4. `-- d.html  

> d.html

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <meta charset="utf-8">  
  5. <title>CGT dropdown</title>  
  6. </head>  
  7. <body>  
  8. <form action="/cgi-bin/dropdown.py" method="post" target="_blank">  
  9. <select name="dropdown">  
  10. <option value="baidu" selected>baidu</option>  
  11. <option value="google">Google</option>  
  12. </select>  
  13. <input type="submit" value="提交"/>  
  14. </form>  
  15. </body>  
  16. </html>  

> dropdown.py

  1. #!/usr/bin/python  
  2. # -*- coding: UTF-8 -*-  
  3.   
  4. # 引入 CGI 处理模块   
  5. import cgi, cgitb   
  6.   
  7. # 创建 FieldStorage的实例   
  8. form = cgi.FieldStorage()   
  9.   
  10. # 接收字段数据  
  11. if form.getvalue('dropdown'):  
  12.    dropdown_value = form.getvalue('dropdown')  
  13. else:  
  14.    dropdown_value = "没有内容"  
  15.   
  16. print "Content-type:text/html"  
  17. print  
  18. print "<html>"  
  19. print "<head>"  
  20. print "<meta charset=\"utf-8\">"  
  21. print "<title>CGT dropdown</title>"  
  22. print "</head>"  
  23. print "<body>"  
  24. print "<h2> 选中的选项是:%s</h2>" % dropdown_value  
  25. print "</body>"  
  26. print "</html>"  

> 访问

  1. http://localhost:8000/d.html  

### CGI 文件上传

> 目录结构

  1. .  
  2. |-- cgi-bin  
  3. |   `-- save_file.py  
  4. `-- file.html  

> file.html

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <meta charset="utf-8">  
  5. <title>CGI FILE</title>  
  6. </head>  
  7. <body>  
  8.  <form enctype="multipart/form-data"   
  9.                      action="/cgi-bin/save_file.py" method="post">  
  10.    <p>选中文件: <input type="file" name="filename" /></p>  
  11.    <p><input type="submit" value="上传" /></p>  
  12.    </form>  
  13. </body>  
  14. </html>  

> save_file.py

  1. #!/usr/bin/python  
  2. # -*- coding: UTF-8 -*-  
  3.   
  4. # 引入 CGI 处理模块   
  5. import cgi, cgitb   
  6.   
  7. # 创建 FieldStorage的实例   
  8. form = cgi.FieldStorage()   
  9.   
  10. # 接收字段数据  
  11. if form.getvalue('dropdown'):  
  12.    dropdown_value = form.getvalue('dropdown')  
  13. else:  
  14.    dropdown_value = "没有内容"  
  15.   
  16. print "Content-type:text/html"  
  17. print  
  18. print "<html>"  
  19. print "<head>"  
  20. print "<meta charset=\"utf-8\">"  
  21. print "<title>CGT dropdown</title>"  
  22. print "</head>"  
  23. print "<body>"  
  24. print "<h2> 选中的选项是:%s</h2>" % dropdown_value  
  25. print "</body>"  
  26. print "</html>"  

### 文件下载

文件下载通过设置HTTP头信息来实现,功能代码如下:

  1. #!/usr/bin/python  
  2. # -*- coding: UTF-8 -*-  
  3.   
  4. # HTTP 头部  
  5. print "Content-Disposition: attachment; filename=\"foo.txt\"";  
  6. print  
  7. # 打开文件  
  8. fo = open("foo.txt", "rb")  
  9.   
  10. str = fo.read();  
  11. print str  
  12.   
  13. # 关闭文件  
  14. fo.close()  
» 转载请注明来源:若我若鱼 » python 系列(14) CGI 编程

Leave a Reply

Your email address will not be published. Required fields are marked *

nineteen − six =