WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server如何与web application通讯的规范。server和application的规范在PEP 3333中有具体描述。要实现WSGI协议,必须同时实现web server和web application,当前运行在WSGI协议之上的web框架有Torando,Flask,Django前端
WSGI协议主要包括server和application两部分:python
WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;
WSGI application接收由server转发的request,处理请求,并将处理结果返回给server。application中能够包括多个栈式的中间件(middlewares),这些中间件须要同时实现server与application,所以能够在WSGI服务器与WSGI应用之间起调节做用:对服务器来讲,中间件扮演应用程序,对应用程序来讲,中间件扮演服务器。web
WSGI协议实际上是定义了一种server与application解耦的规范,便可以有多个实现WSGI server的服务器,也能够有多个实现WSGI application的框架,那么就能够选择任意的server和application组合实现本身的web应用。例如uWSGI和Gunicorn都是实现了WSGI server协议的服务器,Django,Flask是实现了WSGI application协议的web框架,能够根据项目实际状况搭配使用。数据库
3 实际环境使用的wsgi服务器
由于每一个web框架都不是专一于实现服务器方面的,所以,在生产环境部署的时候使用的服务器也不会简单的使用web框架自带的服务器,这里,咱们来讨论一下用于生产环境的服务器有哪些?
1.gunicorn
Gunicorn(从Ruby下面的Unicorn获得的启发)应运而生:依赖Nginx的代理行为,同Nginx进行功能上的分离。因为不须要直接处理用户来的请求(都被Nginx先处理),Gunicorn不须要完成相关的功能,其内部逻辑很是简单:接受从Nginx来的动态请求,处理完以后返回给Nginx,由后者返回给用户。
因为功能定位很明确,Gunicorn得以用纯Python开发:大大缩短了开发时间的同时,性能上也不会很掉链子。同时,它也能够配合Nginx的代理以外的别的Proxy模块工做,其配置也相应比较简单。
配置上的简单,大概是它流行的最大的缘由。
2.uwsgi
由于使用C语言开发,会和底层接触的更好,配置也是比较方便,目前和gunicorn两个算是部署时的惟二之选。
如下是一般的配置文件
[uwsgi]
http = $(HOSTNAME):9033
http-keepalive = 1
pythonpath = ../
module = service
master = 1
processes = 8
daemonize = logs/uwsgi.log
disable-logging = 1
buffer-size = 16384
harakiri = 5
pidfile = uwsgi.pid
stats = $(HOSTNAME):1733
运行:uwsgi --ini conf.ini前端框架
Werkzeug 是一个WSGI工具包,也能够做为一个Web框架的底层库。
Werkzeug服务器
werkzeug 提供了 python web WSGI 开发相关的功能:
路由处理:如何根据请求 URL 找到对应的视图函数
request 和 response 封装: 提供更好的方式处理request和生成response对象
自带的 WSGI server: 测试环境运行WSGI应用app
Werkzeug是一个WSGI工具包,他能够做为一个Web框架的底层库。这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个 WSGI 工具包,它能够做为一个 Web 框架的底层库,由于它封装好了不少 Web 框架的东西,例如 Request,Response 等等。框架
Flask框架的诞生:
Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。
Flask自己至关于一个内核,其余几乎全部的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都须要用第三方的扩展来实现。好比能够用Flask-extension加入ORM、窗体验证工具,文件上传、身份验证等。Flask没有默认使用的数据库,你能够选择MySQL,也能够用NoSQL。
其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是Flask框架的核心。函数
Flask经常使用扩展包:
Flask-SQLalchemy:操做数据库;
Flask-migrate:管理迁移数据库;
Flask-Mail:邮件;
Flask-WTF:表单;
Flask-Bable:提供国际化和本地化支持,翻译;
Flask-script:插入脚本;
Flask-Login:认证用户状态;
Flask-OpenID:认证;
Flask-RESTful:开发REST API的工具;
Flask-Bootstrap:集成前端Twitter Bootstrap框架;
Flask-Moment:本地化日期和时间;
Flask-Admin:简单而可扩展的管理接口的框架工具
Bootstrap
Bootstrap 来自 Twitter, 是一个用于快速开发 Web 应用程序和网站的前端框架,是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷。
Bootstrap 包的内容基本结构:Bootstrap 提供了一个带有网格系统、连接样式、背景的基本结构。这将在 Bootstrap 基本结构 部分详细讲解。CSS:Bootstrap 自带如下特性:全局的 CSS 设置、定义基本的 HTML 元素样式、可扩展的 class,以及一个先进的网格系统。这将在 Bootstrap CSS 部分详细讲解。组件:Bootstrap 包含了十几个可重用的组件,用于建立图像、下拉菜单、导航、警告框、弹出框等等。这将在 布局组件 部分详细讲解。JavaScript 插件:Bootstrap 包含了十几个自定义的 jQuery 插件。您能够直接包含全部的插件,也能够逐个包含这些插件。这将在 Bootstrap 插件 部分详细讲解。定制:您能够定制 Bootstrap 的组件、LESS 变量和 jQuery 插件来获得您本身的版本。