类容(___大纲___):

  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...

                                                                       .