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相关的技术栈.当时我本来打算以故事体 ...
随机推荐
- h2database源码浅析:锁与MVCC
Table Level Locking The database allows multiple concurrent connections to the same database. To mak ...
- Fragment的数据传递
开发之中用到的Fragment的次数越来越多,很多小的项目都已经直接在使用Fragment作为Activity的载体来切换页面.而在开发之中页面的切换我们最关心的问题就是数据的传递了.今天我们主要来研 ...
- 启用Win8(中文版/核心版)中被阉割的远程桌面服务端
Windows 8/8.1 标准版(中文版/核心版)中取消了远程桌面服务端,想通过远程连接到自己的电脑就很麻烦了,第三方远程桌面速度又不理想(如TeamViewer).通过以下方法可让系统恢复远程桌面 ...
- 解决DropDownList 有一个无效 SelectedValue,因为它不在项目列表中。这是怎么回事?
产生错误原因: 绑定在DropDownList的时候 DropDownList没有对应的值 查了一下MSDN:DropDownList.SelectedValue 属性: 此属性返回选定的 ListI ...
- (八)Hibernate 映射关系
所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 一对一映射关系实现 1,按照主键映射: 2, ...
- Oracle之初始创建scott/tiger来测试
在redhat5.5(32bit)上安装好oracle11g数据库软件,然后安装一个数据库,再然后登录数据库,创建scott/tiger测试 首先登录数据库,这里登录时是没有启动数据库的 [oracl ...
- 工作“触雷”经历与总结--记博弈论的应用
工作三年,职场受挫.一些值得说或者不值得说的事情,也懒得去记录.无奈,更多时无奈.内心的骄傲或者自负也不值得炫耀.天生骄傲,或者也只是自身内心的呐喊.毕竟,骄傲的人也不会说出来,搞的好像是有点似得. ...
- javascript 正则 验证 第25节
<html> <head> <title>Form对象</title> <script type="text/javascript&qu ...
- java中的异常处理机制_finally的使用
finally总结: finally代码块:定义一定执行的代码 通常用于关闭资源或者某些一定执行的代码 实例1:finally功能演示 class FuShuException extends Exc ...
- Sublime Text 3的快捷键
Sublime Text 3是一个非常了不起的软件,它不仅具有令人难以置信的内置功能(多行编辑和VIM模式),而且还支持插件.代码片段和其它许多东西. 今天,我们来总结一下Sublime Text 3 ...