类容(___大纲___):
Web 框架本质
Web 框架本质
web 框架本质:
浏览器: socket 客户端
服务器:socket 服务端
1.Socket 服务端
对于所有的Web应用. 本质上其实就是一个socket服务端. 用户的浏览器其实就是一个socket客户端.
#!/usr/bin/env python # -*- coding: utf-8 -*- __Mtime__ = '2018/1/28' import socket def handle_request(client): buf = client.recv(1024) client.send(b"HTTP/1.1 200 OK\r\n\r\n") client.send(b"Hello ") def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost', 8000)) sock.listen(5) while True: connection, address = sock.accept() handle_request(connection) connection.close() if __name__ == '__main__': main()
对于真实开发中的python web程序来说.一般会分为两部分:服务器程序和应用程序
服务器程序:负责对socket服务器进行封装.并在请求到来时.对请求的各种数据进行整理.
应用 程序:则负责具体的逻辑处理
为了方便应用程序的开发.就出现了众多的Web框架.例如:Django、Flask、web.py 等.不同的框架有不同的开发方式.开发出的应用程序都要和服务器程序配合.才能为用户提供服务.这样.服务器程序就需要为不同的框架提供不同的支持.对服务器来说.需要支持各种不同框架.对框架来说.只有支持它的服务器才能被开发出的应用使用.这时候.标准化就变得尤为重要.我们可以设立一个标准.只要服务器程序支持这个标准.框架也支持这个标准.那么他们就可以配合使用.一旦标准确定.双方各自实现.这样.服务器可以支持更多支持标准的框架.框架也可以使用更多支持标准的服务器. - [运行: 然后在浏览器上输入:127.0.0.1:8000. 会返回:hello]
2.Bottle 框架大致可以分为一下部分
Bottle是一个快速、简洁、轻量级的基于WSIG的微型Web框架. 此框架只由一个 .py 文件. 除了Python的标准库外. 其不依赖任何其他模块
pip install bottle easy_install bottle apt-get install python-bottle wget http://bottlepy.org/bottle.py
: 路由系统 - 将不同请求交由指定函数处理
: 模板系统 - 将模板中的特殊语法渲染成字符串.值得一说的是Bottle的模板引擎可以任意指定:Bottle内置模板、mako、jinja2、cheetah
: 公共组件 - 用于提供处理请求相关的信息. 如:表单数据、cookies、请求头等
: 服务 - Bottle默认支持多种基于WSGI的服务. 如下:server_names = { 'cgi': CGIServer, 'flup': FlupFCGIServer, 'wsgiref': WSGIRefServer, 'waitress': WaitressServer, 'cherrypy': CherryPyServer, 'paste': PasteServer, 'fapws3': FapwsServer, 'tornado': TornadoServer, 'gae': AppEngineServer, 'twisted': TwistedServer, 'diesel': DieselServer, 'meinheld': MeinheldServer, 'gunicorn': GunicornServer, 'eventlet': EventletServer, 'gevent': GeventServer, 'geventSocketIO':GeventSocketIOServer, 'rocket': RocketServer, 'bjoern' : BjoernServer, 'auto': AutoServer, }
框架基本使用:
#!/usr/bin/env python # -*- coding:utf-8 -*- from bottle import template, Bottle root = Bottle() @root.route('/hello/') def index(): return "Hello World" # return template('<b>Hello {{name}}</b>!', name="Alex") root.run(host='localhost', port=8080)
- 相关系统使用方法:http://www.cnblogs.com/wupeiqi/articles/5341480.html
WSGI(Web Server Gateway Interface)是一种规范. 它定义了使用python编写的web app与web server之间接口格式.实现web app与web server间的解耦.
Python标准库提供的独立WSGI服务器称为wsgiref【web 框架的开发者用以下进行开发】- [运行: 然后在浏览器上输入:127.0.0.1:8000.会返回:hello web!]
#!/usr/bin/env python # -*- coding: utf-8 -*- __Mtime__ = '2018/1/28' from wsgiref.simple_server import make_server def RunServer(environ, start_response): # environ: 用户请求相关信息 # start_response: 设置用户响应相关信息 start_response('200 OK', [('Content-Type', 'text/html')]) return [bytes('<h1>Hello web!</h1>', encoding='utf-8'), ] if __name__ == '__main__': httpd = make_server('127.0.0.1', 8000, RunServer) print("Serving HTTP on port 8000...") httpd.serve_forever()
3.现成的Web框架:Bottle Flask Tornado Django....
====> 我们.
分类(功能齐全进行分类. Django是最齐全的.):
Django
Bottle、Flask、Tornado、Webpy...
.