一、基本原理

web框架的基本原理:客户端发送请求——》socket处理(网络底层)——》返回请求对应信息(业务逻辑处理),

有的web框架同时包含socket和逻辑处理,如:tornado,但有的不包含socket、只有逻辑处理,需要借助第三方的socket,

借助第三方socket,需要符合统一规范wsgi,常用框架有:djnago、bottle、flask等,

python自带模块wsgiref,可实现socket相关功能,基于此搭建的最基本框架见代码:

# 基于python.wsgiref的最基本web框架(二)

from wsgiref.simple_server import make_server
# 使用框架时,只需要配置对应函数和URLS,
def new():
    f = open('../JS/caidan.html','r')
    data = f.read()
    f.close()
    return data
def index():
    return 'index'

URLS = {
    "new":new,
    "index":index,
}
# 使用框架时,如下内容不需要改动
def RunServer(environ,start_response):
    start_response('200 OK',[('Content-Type','text/html')])
    # 获取用户URL
    url = environ['PATH_INFO']
    if url in URLS.keys():
        functionName = URLS[url]
        return functionName()
    else:
        return "404"

if __name__ == '__main__':
    httpd = make_server('192.168.1.105',8000,RunServer)
    httpd.serve_forever()


# # 基于python.wsgiref的最基本web框架(一)
#
# from wsgiref.simple_server import make_server
#
# def new():
#     return 'new'
# def index():
#     return 'index'
#
# def RunServer(environ,start_response):
#     # start_resoponse:与反馈信息相关
#     start_response('200 OK',[('Content-Type','text/html')])
#     # environ:与请求信息相关
#     # 获取用户URL
#     url = environ['PATH_INFO']
#     if url == "/new":
#         ret = new()
#     elif url == "/index":
#         ret = index()
#     else:
#         ret = "404"
#     return ret
#
# if __name__ == '__main__':
#     httpd = make_server('192.168.1.105',8000,RunServer)
#     httpd.serve_forever()
View Code

二、MVC 与 MTV

所谓的MVC与MTV,本质上是一致的,只是给文件夹起了不同的名字而已,

将web框架文件进行拆分整理,分类放在不同的文件或者文件夹中,如下:

  数据相关操作:Models文件或文件夹,

  模板HTML文件:VIiews文件或文件夹,

  业务逻辑相关:Controller文件,

  启动:start文件,

  路由:urls文件,

上面这种命名方式,就是MVC框架,如下是MTV框架

  数据相关操作:Models文件或文件夹,

  模板HTML文件:Templates文件或文件夹,

  业务逻辑相关:VIiews文件,

  启动:start文件,

  路由:urls文件,

三、基于MVC的web框架核心流程:

1、socket启动服务器start文件,绑定主机和端口,

   客户端通过socket,将客户端信息及请求,传递给socket(WSGI)

     WSGI解析客户端请求,调用路由urls

2、路由urls根据WSGI解析的客户端请求内容,启动相应业务逻辑控制Controller

3、业务逻辑控制Controller读取相关HTML模板文件,结合数据Models、动态模板引擎,返回刷新后的HTML信息给start文件

4、start文件将返回信息,通过socket(WSGI)返回给客户端,

四、动态模板引擎