一、总结一下四种常用的web框架:Django,Flask,Tornado,Bottle
1.MVC:
总结框架之前首先总结一下什么是MVC:
MVC是一种软件设计典范,是一种将业务逻辑,数据操作,界面展示相分离的设计典范,M:model是模型,他主要用来封装我们对数据的操作,V:view是视图,主要是界面的展示,C:controller是控制器,是MVC中的核心,他主要用来接收用户的请求,来处理用户的请求,进行业务逻辑的处理,它连接了model和view。MVC的核心思想是解耦合,将代码拆分开,不用牵一发而动全身。
2.Django:
Django的设计模式是MTV,其实就是MVC的一个变种,Django是基于python的重量级web框架,因为他除了核心模板引擎以外,还提供了很多包,例如后台管理工具admin,静态资源Django storages和Django Pipline ,还有djangorestframework来实现REST等等,它对于数据库的操作是自身的ORM模型(Object Relational Map)对象关系映射,创建模型之后的迁移命令是 python manage.py makemigrations(生成迁移文件)和 python manage.py migrate(将模型迁移到数据库中),ORM默认连接Sqllite(轻量级的关系型数据库),可以自己配置成MySQL。
Django的请求生命周期:客户端发起请求 > nginx > uwsgi > 请求中间件 > url路由 > view视图 > ORM获取数据 > view视图 > 模板渲染 > 服务器返回响应 > uwsgi > nginx > 客户端显示
3.Flask:
Flask是基于python的一个轻量级web框架,他的设计模式是MVC风格,他的设计是借鉴Django,Flask的两个核心组件:Jinja2是一个现代的,设计师友好的Python模板引擎,模仿Django的模板。使用可选的沙盒模板执行环境,它具有快速,广泛使用和安全性,Werkzeug不是一个框架,它是一个带有实用程序的库,可以创建自己的框架或应用程序,因此非常灵活。
四大内置对象:request 请求对象,封装了客户端发送的HTTP请求的内容; session 用户会话,用来记住请求; g变量 :充当者中间媒介的作用,我们可以通过它传递一些数据; current_app代表当前的flask程序实例,使用时需要flask的程序上下文激活
4.Tornado:
是一种基于python的 Web 框架,它的设计模式也是MVC,Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。
web框架的本质就是socket服务端再加上业务逻辑处理,而torando就是这样的框架,而Django,Flask,bottle不同于Torando,他们只包含了业务逻辑处理,他们的使用需要包含socket的第三方模块(即wsgiref)来运行。
Tornado中支持两种路由系统,正则路由系统以及二级域名路由系统,在Torando中,默认执行Handler的get/post等方法之前默认会执行initialize方法,所以可以通过自定义对的方式使得所有请求在处理前执行操作,initialize就是钩子函数。
5.bottle:
Bottle是一个简单高效的遵循WSGI的微型python Web框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。
特性:
Routing:把请求映射到函数,建立简洁动态的URLs
Templates:采用内置模板引擎,同时还支持 mako, jinja2, cheetah 等第三方模板
Utilities:便捷地读取表单数据、上传文件、 cookies、HTTP头信息和其它 HTTP相关的元数据
Server:内置HTTP开发服务器,并且支持 paste, fapws3, bjoern, Google App Engine, Cherrypy 或者其它任何WSGI HTTP 服务器
简单介绍几种类和接口:
bottle.Bottle: 代表一个独立的wsgi应用,由以下部分组成:routes, callbacks, plugins, resources and configuration。
bottle.Route: 封装了路由规则与对应的回调
ServerAdapter:所有bottle适配的web服务器的基类,子类只要实现run方法就可以了
bottle.run
启动wsgi服务器。几个比较重要的参数
app: wsgi application,即可以是bottle.Bottle 也开始是任何满足wsgi 接口的函数
server: wsgi http server,字符串
host:port: 监听端口
核心逻辑: ServerAdapter.run(app)。
MySQL的优化:(MySQL的索引是用B+ Tree来实现的)
1.合理设计表的结构
2.定义字段时能用varchar尽量不用char
3.利用数据库的索引进行优化,类似查字典,先查索引,再根据索引来查表
4.数据库的读写分离,一:分析表的属性,将写入频繁的表与读取频繁的表分开来放。
二:主从同步,读写分离:设置主表Master和从表Slave,主表负责写入数据,写入数据后同步到从表,从表负责读取数据,以上两种方法实现读写分离
5.数据库的分表分区:分区就是把一个数据表的文件和索引分散存储在不同的物理文件中。
分表和分区类似,区别是,分区是把一个逻辑表文件分成几个物理文件后进行存储,而分表则是把原先的一个表分成几个表。进行分表查询时可以通过union或者视图。分表又分垂直分割和水平分割,其中水平分分割最为常用。水平分割通常是指切分到另外一个数据库或表中。