PYTHON的CGIServer的进化
按例程,一步一步理解如何从SOCKET,TCP,HTTP,CGIHTTP进化的。
最终,静态文件和脚本分享,且能处理FORM提交和展示。
下一步,到数据库??:)
A,SOCKET
#HTTPserver
import socket
HOST = ''
PORT = 8088
text_content = '''
HTTP/1.x 200 OK
Content-Type: text/html
<html>
<head>
<title>WOW</title>
</head>
<body>
<p>WOW, Python Server</p>
<form name='input', action='/' method='post'>
First name :<input type='text' name='firstname'><br>
<input type='submit' value='submit'>
</form>
</body>
</html>
'''
f = open('hello.jpg', 'rb')
pic_content = '''
HTTP/1.1 200 OK
Content-Type: image/jpeg
'''
pic_content = pic_content + f.read()
f.close()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
print 'HTTPserver is start listen...'
while True:
s.listen(3)
conn, addr = s.accept()
request = conn.recv(1024)
print request.split(' ')
method = request.split(' ')[0]
src = request.split(' ')[1]
if method == 'GET':
if src == '/hello.jpg':
content = pic_content
else:
content = text_content
print 'Connetcted by', addr
print 'Request is:', request
conn.sendall(content)
if method == 'POST':
form = request.split('\r\n')
idx = form.index('')
entry = form[idx:]
value = entry[-1].split('=')[-1]
conn.sendall(text_content + '\n <p>' + value + '</p>')
conn.close()
B,TCP
#HTTPserver
#import socket
import SocketServer
HOST = ''
PORT = 8080
text_content = '''
HTTP/1.x 200 OK
Content-Type: text/html
<html>
<head>
<title>WOW</title>
</head>
<body>
<p>WOW, Python Server</p>
<form name='input', action='/' method='post'>
First name :<input type='text' name='firstname'><br>
<input type='submit' value='submit'>
</form>
</body>
</html>
'''
f = open('hello.jpg', 'rb')
pic_content = '''
HTTP/1.1 200 OK
Content-Type: image/jpeg
'''
pic_content = pic_content + f.read()
f.close()
class MyTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
print 'HTTPserver is start listen...'
request = self.request.recv(1024)
print 'Connetcted by', self.client_address[0]
print 'Request is:', request
method = request.split(' ')[0]
src = request.split(' ')[0]
if method == 'GET':
if src == '/hello.jpg':
content = pic_content
else:
content = text_content
self.request.sendall(content)
if method == 'POST':
form = request.split('\r\n')
idx = form.index('')
entry = form[idx:]
value = entry[-1].split('=')[-1]
self.request.sendall(text_content + '\n <p>' + value + '</p>')
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
C,HTTP
#HTTPserver #import socket import SocketServer import SimpleHTTPServer HOST = '' PORT = 8088 server = SocketServer.TCPServer((HOST, PORT), SimpleHTTPServer.SimpleHTTPRequestHandler) server.serve_forever()
D,CGI
#HTTPserver #import socket import BaseHTTPServer import CGIHTTPServer HOST = '' PORT = 8088 server = BaseHTTPServer.HTTPServer((HOST, PORT), CGIHTTPServer.CGIHTTPRequestHandler) server.serve_forever()
(HTML及PY)
<head> <title>WOW</title> </head> <html> <p>Wow, Python Server</p> <IMG src="hello.jpg"/> <form name="input" action="cgi-bin/post.py" method="post"> First name:<input type="text" name="firstname"><br> <input type="submit" value="Submit"> </form> </html> ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ import cgi form = cgi.FieldStorage() print 'Content-Type: text/html' print print '<p>Hello world!</p>' print '<p>' + repr(form['firstname']) + '</p>'
截图:


PYTHON的CGIServer的进化的更多相关文章
- Python 参数校验的进化
Python 函数参数魔法 事情的起因是感觉目前项目中的参数校验方法写的太简单了,很多时候需要在server层再if else处理,于是就动手准备写一个好用一点的,可以自定义校验参数规则的参数校验器, ...
- 【大爽python算法】递归算法进化之回溯算法(backtracking)
作者自我介绍:大爽歌, b站小UP主 , python1对1辅导老师, 时常直播编程,直播时免费回答简单问题. 前置知识: 递归算法(recursion algorithm). 我的递归教程: [教程 ...
- 【Python Deap库】遗传算法/遗传编程 进化算法基于python DEAP库深度解析讲解
目录 前言 概述 启发式的理解(重点) 优化问题的定义 个体编码 初始族群的创建 评价 配种选择 锦标赛 轮盘赌选择 随机普遍抽样选择 变异 单点交叉 两点交叉 均匀交叉 部分匹配交叉 突变 高斯突变 ...
- python之阶乘的小例子
现在自己写阶乘是这个样子的 def f(x): return x * f(x-1) if x >1 else 1 后来无意中看到耗子的一篇<Python程序员的进化>的文章, 感脚这 ...
- Python协程与JavaScript协程的对比
前言 以前没怎么接触前端对JavaScript 的异步操作不了解,现在有了点了解一查,发现 python 和 JavaScript 的协程发展史简直就是一毛一样! 这里大致做下横向对比和总结,便于对这 ...
- Python网络02 Python服务器进化
原文:Python网络02 Python服务器进化 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! **注意,在Python 3. ...
- geatpy - 遗传和进化算法相关算子的库函数(python)
Geatpy The Genetic and Evolutionary Algorithm Toolbox for Python Introduction Website (including doc ...
- Python遗传和进化算法框架(一)Geatpy快速入门
https://blog.csdn.net/qq_33353186/article/details/82014986 Geatpy是一个高性能的Python遗传算法库以及开放式进化算法框架,由华南理工 ...
- 《Python测试开发技术栈—巴哥职场进化记》—前言
写在前面 今年从4月份开始写一本讲Python测试开发技术栈的书,主要有两个目的,第一是将自己掌握的一些内容分享给大家,第二是希望自己能系统的梳理和学习Python相关的技术栈.当时我本来打算以故事体 ...
随机推荐
- TFS2013 安装出现TF400102错误解决
我是参照:http://www.cnblogs.com/zhibincai/archive/2013/11/25/3442285.html 进行安装的windows 2012 + sql 2012 S ...
- 转载---SQL Server XML基础学习之<6>--XQuery的 value() 方法、 exist() 方法 和 nodes() 方法
/*------------------------------------------------------------------------------+ #| = : = : = : = : ...
- ASP FSO操作文件(复制文件、重命名文件、删除文件、替换字符串)
ASP FSO操作文件(复制文件.重命名文件.删除文件.替换字符串)FSO的意思是FileSystemObject,即文件系统对象.FSO对象模型包含在Scripting 类型库 (Scrrun.Dl ...
- 再跟SQL谈一谈--高级篇(一)
1.SELECT KEYWORD ①TOP ②LIKE ③IN ④BETWEEN...AND ⑤ALIAS 2.SELECT JOIN ①JOIN | INNER JOIN ②LEFT JOIN ③R ...
- ios7之后 根据UILabel的文字计算frame的方法
ios7 新出来的根据label的文字和字体大小来确定label的宽高. 官方的方法是: - (CGRect)boundingRectWithSize:(CGSize)size options:(NS ...
- 牵扯较多属性和方法的类题目,很简单的题目本来不想发的,如果有同学学到这个题目感觉太长不愿敲代码,copy走我的即可~不过还是建议自己打一打
/* 3.设计一个"学生"类 1> 属性 * 姓名 * 生日 * 年龄 * 身高(单位是m) * 体重(单位是kg) * 性别 * C语言成绩 * OC成绩 * iOS成绩 ...
- 牛客网算法题之All-in-All
题目: 有两个字符串s 和t,如果即从s 中删除一些字符,将剩余的字符连接起来,即可获得t.则称t是s 的子序列.请你开发一个程序,判断t是否是s的子序列. 输入描述: 输入包含多组数据,每组数据包含 ...
- C++ txt文档读取
void readfile(string filepath){ ifstream myfile; if (!myfile) { cout << "打开文件出错!"; e ...
- lambda表达式————一看就会
这里没有过多讲解,只有几个连接,进入看,看完后你就会觉得什么博客对lambda的介绍都是浮云,不是片面就是不准确. 链接地址: 1: https://msdn.microsoft.com/en-us/ ...
- A Case for Flash Memory SSD in Enterprise Database Applications
通过分析固态硬盘的特性对数据库中不同对象,如:表,索引,回滚段,重做日志等的应用进行具体研究,最后将数据库中不同的对象进行区别应用