python web的进化历程
对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。
阶段1
socket服务端和客户端都自己编写
实现访问8080端口,返回一个'hello world'
#!/usr/bin/env python
#encoding: utf-8
#@2017-03-30
"""最简单的web框架""" import socket def handle_request(client):
"""应用程序,web开发者自定义部分"""
buf = client.recv(1024)
client.send('HTTP/1.1 200 OK\1\n\r\n')
client.send("Hello, world!") def server():
"""服务端程序,web开发者共用部分
本质:对socket进行封装"""
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('0.0.0.0', 8080))
sock.listen(5) while True:
connection, address = sock.accept()
handle_request(connection) # 阻塞
connection.close() if __name__ == '__main__':
server()
阶段2
WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦。python标准库提供的独立WSGI服务器称为wsgiref
实现访问8000端口,返回一个'hello world'
#!/usr/bin/env python
#coding:utf-8 # 封装后的服务程序
from wsgiref.simple_server import make_server def RunServer(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return 'Hello, world!' if __name__ == '__main__':
httpd = make_server('0.0.0.0', 8000, RunServer)
print "Serving HTTP on port 8000..."
httpd.serve_forever()
阶段3
一些功能模块化,逐渐有了django的影子
demo:点击下载
main.py作为程序入口
#!/usr/bin/env python
#coding:utf-8 # 封装后的服务程序
from wsgiref.simple_server import make_server
from urls import url def RunServer(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
# 获取用户URL
user_url = environ['PATH_INFO'] # 根据URL不同返回不同的结果
for item in url:
if item[0] == user_url:
return item[1]()
else:
return '<h1>404 not found</h1>' if __name__ == '__main__':
httpd = make_server('0.0.0.0', 8000, RunServer)
print "Serving HTTP on port 8000..."
httpd.serve_forever()
views.py方法函数
#!/usr/bin/env python
#coding:utf-8 def index():
return 'index' def login():
return 'login' def logout():
return 'logout' url = (
('/index/', index),
('/login/', login),
('/logout/', logout),
)
url到方法函数的映射urls.py
#encoding: utf-8
from views import * """指定URL到处理函数的映射"""
url = (
('/index/', index),
('/login/', login),
('/logout/', logout),
)
python web的进化历程的更多相关文章
- 我的第一个python web开发框架(1)——前言
由于之前经验不是很丰富,写的C#系统太过复杂,所以一直想重写,但学的越多越觉得自己懂的越少,越觉的底气不足.所以一直不敢动手,在内心深处对自己讲,要静下心来认真学习,继续沉淀沉淀.这两年多以来找各种机 ...
- Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》
首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...
- Python Web 方向(一)
Python Web 方向(一) --------Django站点创建 文章地址:http://www.cnblogs.com/likeli/p/5821744.html Python版本:2.7 推 ...
- 浅谈五大Python Web框架
转载:http://feilong.me/2011/01/talk-about-Python-web-framework 说到Web Framework,Ruby的世界Rails一统江湖,而Pytho ...
- nginx上部署python web
nginx上部署python web http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html
- 全面解读python web 程序的9种部署方式
转载自鲁塔弗的博客,本文地址http://lutaf.com/141.htm python有很多web 开发框架,代码写完了,部署上线是个大事,通常来说,web应用一般是三层结构 web serve ...
- Python Web 开发的十个框架【转载】
Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...
- tornado 学习笔记2 Python web主流框架
2.1 Django 官方网址:https://www.djangoproject.com/ 简介:Django is a high-level Python Web framework that e ...
- python web框架——扩展Django&tornado
一 Django自定义分页 目的:自定义分页功能,并把它写成模块(注意其中涉及到的python基础知识) models.py文件 # Create your models here. class Us ...
随机推荐
- 通过带Flask的REST API在Python中部署PyTorch
在本教程中,我们将使用Flask来部署PyTorch模型,并用讲解用于模型推断的 REST API.特别是,我们将部署一个预训练的DenseNet 121模 型来检测图像. 备注: 可在GitHub上 ...
- Numpy和OpenCV中的图像几何变换
介绍 上面的图像使它不言而喻什么是几何变换.它是一种应用广泛的图像处理技术.例如,在计算机图形学中有一个简单的用例,用于在较小或较大的屏幕上显示图形内容时简单地重新缩放图形内容. 它也可以应用于扭曲一 ...
- NeurIPS审稿引发吐槽大会,落选者把荒唐意见怼了个遍:“我谢谢你们了”
七月份的尾巴,机器学习顶会NeurIPS 2019的初步结果已经来了. 一年一度的吐槽盛会也由此开始. "有评审问我啥是ResNet." "有评审问我为啥没引用X论文.我 ...
- 2020年最新版Web前端学习路线图-前端小白入门必读-pink老师推荐
Hello,大家好,相信很多学习前端的小伙伴,会有很多的疑惑: 我要学习那些技术? 我要到哪里去学习这些技术呢? 学习这些技术的目的对就业有什么帮助呢? 我学到什么程度可以胜任工作? ... 这里,p ...
- 让vscode支持WePY框架 *.wpy
WePY框架的.wpy 文件在微信开发者工具中无法打开,这里使用vscode 打开,并安装vetur 和vetur-wepy 插件即可
- Thread---重排序
重排序 数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性.数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a = 1;b = a; 写一 ...
- 树莓派 Raspberry PI基础
树莓派 Raspberry PI基础 官网网址:https://www.raspberrypi.org 下载地址:https://www.raspberrypi.org/downloads/ 官方系统 ...
- 个人项目:WordCount (Java)
一.Github项目地址 https://github.com/misterchaos/WordCount 二.解题思路 2.1 基本需求分析 经过仔细阅读题目,分析得出项目的基本需求如下: wc.e ...
- javascript实现组合列表框中元素移动效果
应用背景:在页面中有两个列表框,需要把其中一个列表框的元素移动到另一个列表框 . 实现的基本思想: (1)编写init方法对两个列表框进行初始化: (2)为body添加onload事件调用init方 ...
- 惊呆了!不改一行 Java 代码竟然就能轻松解决敏感信息加解密|原创
前言 出于安全考虑,现需要将数据库的中敏感信息加密存储到数据库中,但是正常业务交互还是需要使用明文数据,所以查询返回我们还需要经过相应的解密才能返回给调用方. ps:日常开发中,我们要有一定的安全意识 ...