python的web框架(1)

1.首先写一个最简单的web服务器,只能给客户回应一个固定的hello world的页面。

from socket import *
from multiprocessing import Process def deal(conn):
recv_data = conn.recv(1024).decode('gb2312')
print(recv_data)
conn.send('HTTP/1.1 200 OK \r\n\r\n <h1>hello world</h1>'.encode('gb2312')) def main():
s = socket(AF_INET, SOCK_STREAM)
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind(('',8000))
s.listen(1023) while 1:
conn, user_info = s.accept()
print(user_info)
p = Process(target=deal, args=(conn,))
p.start()
conn.close() if __name__ == '__main__':
main()

2.根据用户请求的页面,打开页面文件,读取,并回复给用户,完成多进程web静态页面服务器

#!/usr/bin/env python3
# coding:utf-8 from socket import *
from multiprocessing import Process def deal(conn):
recv_data = conn.recv(1024).decode('gb2312')
recv_data_head = recv_data.splitlines()[0]
print('------', recv_data_head)
request_method, request_path, http_version = recv_data_head.split() # 去掉url中的?和之后的参数
request_path = request_path.split('?')[0] if request_path == '/':
request_path = '/index.html'
file_name = "." + request_path
try:
f = open(file_name, 'rb')
except IOError:
conn.send(b'HTTP/1.1 404 ERROR \r\n\r\n <h1>Page is not exsit .</h1>')
return read_data = f.read()
send_data = b'HTTP/1.1 200 OK \r\n\r\n' + read_data
conn.send(send_data)
f.close() def main():
s = socket(AF_INET, SOCK_STREAM)
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind(('',8000))
s.listen(1023) while 1:
conn, user_info = s.accept()
print(user_info)
p = Process(target=deal, args=(conn,))
p.start()
conn.close() # 进程会复制出一个新的conn,所以这里的conn需要关闭 if __name__ == '__main__':
main()

3.为了方便操作,可以将之前的函数式编程改成面向对象编程。将所有的方法集成到一个类中,这样更加方便,也更易于使用者了解和使用。

#!/usr/bin/env python3
# coding:utf-8 from socket import *
from multiprocessing import Process class MyWebServer(object): @staticmethod
def deal(conn):
recv_data = conn.recv(1024).decode('gb2312')
recv_data_head = recv_data.splitlines()[0]
print('------', recv_data_head)
request_method, request_path, http_version = recv_data_head.split() # 去掉url中的?和之后的参数
request_path = request_path.split('?')[0] if request_path == '/':
request_path = '/index.html'
file_name = "." + request_path try:
f = open(file_name, 'rb')
except IOError:
conn.send(b'HTTP/1.1 404 ERROR \r\n\r\n <h1>Page is not exsit .</h1>')
return read_data = f.read()
send_data = b'HTTP/1.1 200 OK \r\n\r\n' + read_data
conn.send(send_data)
f.close() def __init__(self):
self.s = socket(AF_INET, SOCK_STREAM)
self.s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
self.s.bind(('',8000))
self.s.listen(1023) def start(self):
while 1:
conn, user_info = self.s.accept()
print(user_info)
p = Process(target=self.deal, args=(conn,))
p.start()
conn.close() # 进程会复制出一个新的conn,所以这里的conn需要关闭 s = MyWebServer()
s.start()

python之web框架(1):完成静态页面web服务器的更多相关文章

  1. python之web框架(3):WSGI之web应用完善

    python之web框架(3):WSGI之web应用完善 1.上篇的web框架太low,只能实现回应固定页面.现在将它进行完善.首先将wsgi和web服务器进行分离,并给予它回复静态页面的能力. we ...

  2. web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例

    Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...

  3. c++ web框架实现之静态反射实现

    0 前言 最近在写web框架,框架写好后,需要根据网络发来的请求,选择用户定义的servlet来处理请求.一个问题就是,我们框架写好后,是不知道用户定义了哪些处理请求的类的,怎么办? 在java里有一 ...

  4. web框架-(一)初识web框架

    一.web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:ut ...

  5. express框架实现承载静态页面的能力

    我们知道nodejs本身不具有一个web容器的作用,不像tomcat或者IIS这样的服务器一样天然具有web容器承载静态动态页面的能力,如果要原生实现的话需要自己通过路由配置,比较麻烦,而expres ...

  6. Python nose单元测试框架结合requests库进行web接口测试

    [本文出自天外归云的博客园] 之前写过一篇关于nose使用方法的博客.最近在做一元乐购产品的接口测试,结合着python的requests库可以很方便的进行web接口测试并生成测试结果.接口测试脚本示 ...

  7. Java Web项目--显示一个静态页面

    我们可以在Eclipse中新建一个Dynamic Web Project,然后在项目的WebContent目录下新建一个Html文件page1.html,其内容如下: <!DOCTYPE htm ...

  8. python使用bs4爬取boss静态页面

    思路: 1.将需要查询城市列表,通过城市接口转换成相应的code码 2.遍历城市.职位生成url 3.通过url获取列表页面信息,遍历列表页面信息 4.再根据列表页面信息的job_link获取详情页面 ...

  9. 【web】movie review——静态页面训练、css训练

    实现样式要求: image: banner.png: generaloverview.png: background.png: bannerbackground.png: rottenbig.png: ...

随机推荐

  1. Java并发编程原理与实战四十五:问题定位总结

    背景   “线下没问题的”. “代码不可能有问题 是系统原因”.“能在线上远程debug么”    线上问题不同于开发期间的bug,与运行时环境.压力.并发情况.具体的业务相关.对于线上的问题利用线上 ...

  2. html_entity_decode() 将 HTML 实体转成字符原型

    PHP html_entity_decode() 适用于PHP 4.3.0+,将HTML 实体转成字符. html_entity_decode(包含HTML 实体的字符串, 可选如何解码引号, 可选字 ...

  3. 安装Win8引起Ubuntu启动项丢失的恢复过程

    画电路图的时候手痒,于是将之前做好的Win8PE拿出来装着玩儿.至于Win8的pE很好做,用UltraISO将Win8 的镜像用制作硬盘镜像的方法烧进U盘就行了. Win8的安装过程也很简单.安装前为 ...

  4. id=%d是什么意思呢?

    $branch=M('Branchs')->where("id=%d",session('branchid'))->find(); %d代表,逗号后面那个user[]的 ...

  5. 【CC2530强化实训03】定时器间隔定时实现按键长按与短按

    [CC2530强化实训03]定时器间隔定时实现按键长按与短按 [题目要求] 虽然用普通的延时函数能够实现按键长按与短按的判别,但是在实际的工程应用和项目开发中并不好用也不灵活.更多得是借助定时器的间隔 ...

  6. web项目启动首页能访问接口报404

    这个问题如果控制台没有报错,然后看一下日志,看看spring容器是否加载: 如果是一直卡在这里了,多半是resources文件下的配置有问题,或者是resources目录不是源文件,工具无法识别 我遇 ...

  7. 【FCS NOI2018】福建省冬摸鱼笔记 day5

    第五天,也是讲课的最后一天. 数据结构专题,讲师:杨志灿 他的blog我似乎找不到了……以前肯定是在百度博客里面.但是现在百度博客消失了. PPT做的很有感觉,说了很多实用的技巧. 我觉得其实是收获最 ...

  8. 007_苹果Mac系统锁屏不待机效果设置方法介绍

    Mac如何设置锁屏不断网?Mac如何设置锁屏不待机?这是一个非常麻烦的设置,有时候一锁屏幕电脑就跟着待机了,这非常的麻烦,所以今天小编就用图文教程的方式教大家Mac如何设置锁屏不断网Mac如何设置锁屏 ...

  9. 利用CSS函数calc(...)实现Web页面左右布局

    前言 因为自己的网站需要,想要做一个左右布局的页面: 左边是导航菜单之类的东西.右边是文档内容(因为最近看的一些软件的文档页面都是这么布局的): 左边固定宽度——300像素.右边使用剩余的宽度: 左边 ...

  10. 用js面向对象思想封装插件

    js是基于原型的面向对象语言,如果你学过java,c#等正统面向对象语言,你会难以理解js的面向对象,他和普通的面向对象不太一样,今天,我们通过封装一个toast插件,来看看js面向对象是如何运行的. ...