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模板 处理请求(函数)