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>‘

截图:

时间: 2024-11-06 09:24:48

PYTHON的CGIServer的进化的相关文章

2016年第一篇

进入2016年的第一天起,自己的内心非常是想来一个从头开始,但是你再怎么样,还是应征一句话:“你是咋样的,还是咋样的.” 意思就是你原先是怎么样的,新的一年到来你还是原来的,就是你将不会有改变. 最近一段时间对我来说是比较煎熬的,有如下事情: 1.前不久报了老虎大神旗下的一个docker班,跟了三个星期,觉得自己太sb了,啥也不会,只能默默的退课,哎! 2.自从圣诞开始我就疯狂的面试,结果不怎么理想.其中特别辜负了倪总和谭总,只能说自己的实力还是不够,希望还有下次机会,或许这一生只有这么一次吧,

(一)Python入门-6面向对象编程:01面向对象和面向过程区别-对象的进化

面向对象: 面向对象(Object oriented Programming,OOP)编程的思想主要是针对大型 软件设计而来的.面向对象编程使程序的扩展性更强.可读性更好,使的编程可以像搭 积木一样简单. 面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式 更加接近人的思维,从而大大提高了编程的效率. Python完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向 对象的基本功能,例如:继承.多态.封装等. Python中,一切皆对象.我们在前面学习的数据类型

差分进化算法-python实现

DEIndividual.py 1 import numpy as np 2 import ObjFunction 3 4 5 class DEIndividual: 6 7 ''' 8 individual of differential evolution algorithm 9 ''' 10 11 def __init__(self, vardim, bound): 12 ''' 13 vardim: dimension of variables 14 bound: boundaries

Python应用02 Python服务器进化

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! **注意,在Python 3.x中,BaseHTTPServer, SimpleHTTPServer, CGIHTTPServer整合到http.server包,SocketServer改名为socketserver,请注意查阅官方文档. 在上一篇文章中(用socket写一个Python服务器),我使用socket接口,制作了一个处理HTTP请求的Python服务器.任何一台装有

python学习小记01--萌新的进化

1.英文缩写 比如换行\n代表[+newline]:退格\b代表[+backspace]:回车\r代表[+return].大家可以按照这种方法记住转义字符的含义 整数,整数英文为integer,简写做int整数,整数英文为integer,简写做int str代表字符串,全称为string,整数的英文简称为int,全称为integer. 2.= 和 == 代码世界中,赋值符号=不是左边等于右边的意思.仅仅表示赋值动作:把右边的内容放到了左边的盒子中. 3. 整数 而整数脱掉了[引号]马甲,只能『单

万恶之源-python内容的进化

1.整数: ? int--计算和比较 ? 整数可以进行的操作: ? bit_length().计算整数在内存中占用的二进制码的长度 2.布尔值 ? bool 布尔值--用于条件使用 ? True 真 ? False 假 print(bool(-10)) 0是False 非0的都是True print(bool("")) 空的字符串是False 非空的就是True print(type(str(True))) 布尔值可以转换成字符串 print(int(False)) Ture转换成数字

[LeetCode]题解(python):037-Sudoku Solver

题目来源: https://leetcode.com/problems/sudoku-solver/ 题意分析: 这次的题目就是上一题的进化版.填好一个数独. 题目思路: 这题直接用dfs暴力解决.把“*”用(1-9)直接填就行.时间复杂度比较高.要注意的是,题目要求没有返回值,所以要另外写一个函数用来判断填数之后是否满足可以填好. 代码(python): 1 class Solution(object): 2 def isValue(self,board,x,y): 3 #列符合 4 for

Python快速教程

Python快速教程 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容很多,加上各种标准库.拓展库,乱花渐欲迷人眼.我一直希望写一个快速的.容易上手的Python教程,而且言语简洁,循序渐进,让没有背景的读者也可以从基础开始学习.我将在每一篇中专注于一个小的概念,希望在闲暇时可以很快读完. 小提醒 教程将专注于Python基础,语法基于Pytho

安装Python

因为Python是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上.在Windows上写Python程序,放到Linux上也是能够运行的. 要开始学习Python编程,首先就得把Python安装到你的电脑里.安装后,你会得到Python解释器(就是负责运行Python程序的),一个命令行交互环境,还有一个简单的集成开发环境. 2.x还是3.x 目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的,因为现在Python正在朝着3.x版本进化