web服务器和web客户端之间的网络通信,本质上是 socket的通信, 服务器端运行的是socketServer 客户端运行的是socketClient.
对于python web程序来说,一般来说会分为两部分,服务器程序\应用程序, (jsp好像也是这样的,让我想起了java的war包,不是太了解,只知道这些war包可以组成jsp上的应用).
服务器程序:负责对socket服务器进行封装,在请求到来的时候,对请求进行整理,
应用程序 : 负责具体的业务逻辑处理,
为了方便应用程序的开发,出现了很多web框架, python的web框架有 django flask web.py tornado等等
不同的框架的开发方式不尽相同, 但都需要 应用程序和服务器程序配合使用, 并为用户提供服务.
但是服务器要为不同的框架提供支持,如果没有一个统一的标准, 那么局面会很混乱,无论对服务器还是对于框架 都是不好的, 关键是开发会很累. 所以标准很重要,
按照一个统一的标准进行开发, 如果服务器程序 和 应用程序都支持这个统一的标准, 那么两者就可以配合使用,一旦标准确定, 双方各自实现,(就好像螺丝钉 和螺帽 )
这样服务器可以支持更多支持该标准的框架 ,框架也可以使用更多 支持标准的服务器 (互利互惠)
WSGI(Web Server Gateway Interface) 是Web服务器与Web应用程序或应用框架之间的一种低级别的接口,可以提升可移植Web应用开发的共同点.
WSGI就像是一座桥梁,一边连着web服务器,另一边连着用户的应用。但是呢,这个桥的功能很弱,有时候还需要别的桥来帮忙才能进行处理。
SERVER <---> wsgi <---> APP
我们可以先写一个简单的框架:
struct.py
#!/usr/bin/env python
#coding:utf-8
from wsgiref.simple_server import make_server
def index():
return 'index'
def login():
return 'login'
urlpatterns = [
('/index/',index),
('/login/',login),
]
def RunServer(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
url = environ['PATH_INFO']
func = None
for item in urlpatterns:
if item[0] == url:
func = item[1]
break
if func:
return func()
else:
return '404 not found'
if __name__ == '__main__':
httpd = make_server('', 8000, RunServer)
print "Serving HTTP on port 8000..."
httpd.serve_forever()
模板引擎:
参考jinja2 http://timesnotes.blog.51cto.com/1079212/1748411
在使用web框架的时候,我们需要注意两个名字 MVC MTV(不是music TV)
MVC : 指的是 模型-视图-控制器 模式
# models views controllers
# 数据库处理 html模板 处理请求(函数)
MTV : 指的是 模型-模板-视图 模式
# models templates views
# 数据库处理 html模板 处理请求(函数)
转载于:https://blog.51cto.com/timesnotes/1748582