对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。

阶段1

socket服务端和客户端都自己编写

实现访问8080端口,返回一个'hello world'

  1. #!/usr/bin/env python
  2. #encoding: utf-8
  3. #@2017-03-30
  4. """最简单的web框架"""
  5.  
  6. import socket
  7.  
  8. def handle_request(client):
  9. """应用程序,web开发者自定义部分"""
  10. buf = client.recv(1024)
  11. client.send('HTTP/1.1 200 OK\1\n\r\n')
  12. client.send("Hello, world!")
  13.  
  14. def server():
  15. """服务端程序,web开发者共用部分
  16. 本质:对socket进行封装"""
  17. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  18. sock.bind(('0.0.0.0', 8080))
  19. sock.listen(5)
  20.  
  21. while True:
  22. connection, address = sock.accept()
  23. handle_request(connection) # 阻塞
  24. connection.close()
  25.  
  26. if __name__ == '__main__':
  27. server()

阶段2

WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦。python标准库提供的独立WSGI服务器称为wsgiref

实现访问8000端口,返回一个'hello world'

  1. #!/usr/bin/env python
  2. #coding:utf-8
  3.  
  4. # 封装后的服务程序
  5. from wsgiref.simple_server import make_server
  6.  
  7. def RunServer(environ, start_response):
  8. start_response('200 OK', [('Content-Type', 'text/html')])
  9. return 'Hello, world!'
  10.  
  11. if __name__ == '__main__':
  12. httpd = make_server('0.0.0.0', 8000, RunServer)
  13. print "Serving HTTP on port 8000..."
  14. httpd.serve_forever()

阶段3

一些功能模块化,逐渐有了django的影子

demo:点击下载

main.py作为程序入口

  1. #!/usr/bin/env python
  2. #coding:utf-8
  3.  
  4. # 封装后的服务程序
  5. from wsgiref.simple_server import make_server
  6. from urls import url
  7.  
  8. def RunServer(environ, start_response):
  9. start_response('200 OK', [('Content-Type', 'text/html')])
  10. # 获取用户URL
  11. user_url = environ['PATH_INFO']
  12.  
  13. # 根据URL不同返回不同的结果
  14. for item in url:
  15. if item[0] == user_url:
  16. return item[1]()
  17. else:
  18. return '<h1>404 not found</h1>'
  19.  
  20. if __name__ == '__main__':
  21. httpd = make_server('0.0.0.0', 8000, RunServer)
  22. print "Serving HTTP on port 8000..."
  23. httpd.serve_forever()

views.py方法函数

  1. #!/usr/bin/env python
  2. #coding:utf-8
  3.  
  4. def index():
  5. return 'index'
  6.  
  7. def login():
  8. return 'login'
  9.  
  10. def logout():
  11. return 'logout'
  12.  
  13. url = (
  14. ('/index/', index),
  15. ('/login/', login),
  16. ('/logout/', logout),
  17. )

url到方法函数的映射urls.py

  1. #encoding: utf-8
  2. from views import *
  3.  
  4. """指定URL到处理函数的映射"""
  5. url = (
  6. ('/index/', index),
  7. ('/login/', login),
  8. ('/logout/', logout),
  9. )

python web的进化历程的更多相关文章

  1. 我的第一个python web开发框架(1)——前言

    由于之前经验不是很丰富,写的C#系统太过复杂,所以一直想重写,但学的越多越觉得自己懂的越少,越觉的底气不足.所以一直不敢动手,在内心深处对自己讲,要静下心来认真学习,继续沉淀沉淀.这两年多以来找各种机 ...

  2. Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》

    首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...

  3. Python Web 方向(一)

    Python Web 方向(一) --------Django站点创建 文章地址:http://www.cnblogs.com/likeli/p/5821744.html Python版本:2.7 推 ...

  4. 浅谈五大Python Web框架

    转载:http://feilong.me/2011/01/talk-about-Python-web-framework 说到Web Framework,Ruby的世界Rails一统江湖,而Pytho ...

  5. nginx上部署python web

    nginx上部署python web http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

  6. 全面解读python web 程序的9种部署方式

    转载自鲁塔弗的博客,本文地址http://lutaf.com/141.htm  python有很多web 开发框架,代码写完了,部署上线是个大事,通常来说,web应用一般是三层结构 web serve ...

  7. Python Web 开发的十个框架【转载】

    Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...

  8. tornado 学习笔记2 Python web主流框架

    2.1 Django 官方网址:https://www.djangoproject.com/ 简介:Django is a high-level Python Web framework that e ...

  9. python web框架——扩展Django&tornado

    一 Django自定义分页 目的:自定义分页功能,并把它写成模块(注意其中涉及到的python基础知识) models.py文件 # Create your models here. class Us ...

随机推荐

  1. Transformers 中使用 TorchScript | 四

    作者|huggingface 编译|VK 来源|Github 注意:这是我们使用TorchScript进行实验的开始,我们仍在探索可变输入大小模型的功能.它是我们关注的焦点,我们将在即将发布的版本中加 ...

  2. R与金钱游戏:美股与ARIMA模型预测

    似乎突如其来,似乎合情合理,我们和巴菲特老先生一起亲见了一次,又一次,双一次,叒一次的美股熔断.身处历史的洪流,渺小的我们会不禁发问:那以后呢?还会有叕一次吗?于是就有了这篇记录:利用ARIMA模型来 ...

  3. C++最简打开网页的方法

    system("explorer https://pay.747fz.com");

  4. 浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别

    最近一次的面试中,被面试官问到varchar和nvarchar的区别,脑海里记得是定长和可变长度的区别,但却没能说出来.后来,在网上找了下网友总结的区别.在这里做个备忘录: 一,SQL Server中 ...

  5. HIT软件构造课程3.2总结(Designing Specificaton)

    本节转向“方法/函数/操作”如何定义 上一节是名词 这一节是动词 1.编程语言中的函数和方法 方法 使用者不需要知道方法内部如何实现,这叫做“抽象”. 参数 参数类型是否匹配,在静态检查时完成. 返回 ...

  6. python 开发工具简介

    一.python 开发工具简介 1.IDLE IDLE是开发python程序的基本IDE(集成开发环境),具备基本的IDE的功能,是非商业Python开发的不错的选择.当安装好python以后,IDL ...

  7. Unity引擎入门——制作第一个2D游戏(2)角色移动与动画

    在上一节的内容里,我们已经创建出了一个主角,也搭建了一个简单的场景. 传送门:https://www.cnblogs.com/zny0222/p/12653088.html 既然有了主角,要怎样才能让 ...

  8. IDEA 新版本激活之后老是有弹窗 解决方法

    用了最新的版本的IDEA,然后用网上的方法破解到了2089年,但是打开IDEA的时候,老是出现一个弹窗,内容如下: This agent is for learning and research pu ...

  9. 使用Putty登录亚马逊云主机

    亚马逊云主机配置之后会提示 提供一个 pem证书, 打开 SSH 客户端.(了解操作方法 使用 PuTTY 连接) 找到您的私有密钥文件(test001.pem).向导会自动检测您用于启动实例的密钥. ...

  10. MTK Android Driver :Audio音频参数

    音频参数集成(具体参数由硬件提供) 1.ring/key/mic/fmr/speech/sidetone/media/matv增益: \mediatek\custom\k9\cgen\inc\audi ...