一个超轻量级、高性能的python web框架

guava的Python项目详细描述


番石榴![构建状态](https://travis ci.org/flatpache/guava.svg)(https://travis-ci.org/flatpache/guava) < BR>
guava是用c编写的一个超轻量级、高性能的python web框架,它与其他传统的python web框架完全不同。记住,这项工程不是为了保护车轮。 < BR>
如果您不喜欢Guava提供的功能,您可以使用诸如**路由器**、**会话**、**请求**、**响应**、**内置Web服务器**等底层结构,利用Guava提供的高性能优势构建您自己的Web框架。 < BR>
我写了一篇文章来解释番石榴框架的设计,[链接](http://code trick.com/guava-a-super-lightweight-high-performance-web-framework-for-python-writen-in-c/)。 < BR>< BR>
状态 < BR>< > 1。在高度积极的发展下。
2。尚未发布任何稳定版本,此git repo是**开发人员预览版**。现在不要用于生产。 < BR>
我会尽快发布稳定版本。我还将发布在番石榴上构建的传统web应用程序。 < BR>
无论如何,你可以评估它,提前破解它。如果你认为番石榴将来能帮你,别忘了出演。:) < BR>
如果您想投稿,请参见投稿部分。 < BR>
我会尽我所能让readme.md保持最新,任何时候如果你能阅读源代码就更好了。 < BR>< BR>
番石榴的哲学 < BR>
有关番石榴项目的详细故事和设计,请访问[我的博客](http://www.code-trick.com)。 < BR>< > 1。高性能
2。更喜欢约定而不是配置
3。轻量级,只做一个web框架应该做的事情
4。超级可扩展性 < BR>< BR>
主要特点 < BR>< > 1。异步的,建立在libuv之上
2。内置HTTP Web服务器
3。内置路由器:路由器,静态路由器,mvcrouter,restfulrouter
4。会话管理:内存、本地文件系统、远程(SSO)
5。一切都是可扩展的 < BR>< BR>
性能 < BR>< BR>
我做了一个快速的性能测试,所有代码都存储在**基准**文件夹中。 < BR>
如果有不正确的地方,请纠正我。 < BR>< BR>
**测试环境** < BR>
ec2:t2.micro 1cpu 0.613gib电子束 < BR>
操作系统:ubuntu14.04 < BR>
基准程序:[wrk](https://github.com/wg/wrk) < BR>< BR>< > 1。地狱世界表演 < BR>
命令:``wrk-t12-c400-d30s http://127.0.0.1:8000/``` < BR>
它使用12个线程运行基准测试30秒,并保持400个http连接处于打开状态。 < BR>
已禁用AL < BR>
框架请求/解释|
|
|
樱桃色1627.68|
龙卷风3373.22|
未加工节点4977.63|
原汁原味20230.32|
番石榴18799.11内存泄漏| < BR>< BR>
这次测试番石榴没有成功的原因是番石榴中一些已知但未修复的错误,我将很快修复并重新运行测试。 < BR>
完成基本功能后,我将专注于优化部分,不断提高性能。老实说,番石榴有很多地方可以优化。 < BR>< BR>
部署 < BR>< BR>
部署在nginx/apache之后 < BR>< BR>

----
webserver<;<;--反向代理规则-->;>;guava http服务器|
----
< BR>
无nginx/apache < BR>
番石榴内置web服务器的性能足以充当独立的web服务器。但到目前为止我还没有花太多时间在安全方面,所以也许不是他是选择这种部署的最佳时机。 < BR>< BR>
路由器 < BR>< BR>
番石榴有四个内置路由器,试图简化您的生活。有关详细文档,请参阅本回购协议中的文档目录。 < BR>
每个路由器有一个安装点。所有路由器将合成树状结构。挂载点的概念是为了方便您将子应用程序分组。 < BR>
静态路由器 < BR>
staticrouter专用于提供静态资源,例如:css、javascript文件或图像。 < BR>< BR>

static_router=guava.router.staticrouter(mount_point="/static",
directory="我的静态目录",
允许索引=真)
< BR>
mvcrouter公司 < BR>
如果您的应用程序是典型的路由器,则可以将其设置为默认路由器。 < BR>

mvc_router=guava.router.mvcrouter(mount_point="/")
< BR>
对于Exmaple: < BR>
url package module action args get post网址|
|
/控制器索引索引(){}{|
|
|
/post/view/10控制器post视图('10',){}{}|
/post/move/10/20控制器post move('10','20',){}{}|
/发布/编辑/10?type=draft controllers post edit('10',){type':'draft'}{}| < BR>< BR>
卫生间 < BR>
如果您想提供restful api,这个路由器特别有用。 < BR>
方法url类操作|
--|
获取/用户用户控制器获取全部|
获取/users/10 userscontroller获取一个|
删除/users/10用户控制器删除一个|
post/users/userscontroller创建一个|
放置/users/10 userscontroller更新一个| < BR>
**我还没有想到处理这种url```/users/10/friends/```子资源的最佳方法,等我有了更好的主意,我很快就会集成到这个功能中去了。** < BR>
定制或实施高级路由器 < BR>
如果上述路由器不能满足您的所有要求,您可以使用customrouter来构建或覆盖复杂的路由 < BR>

自定义路由器=guava.router.router({
"/关于":番石榴.handler.handler(package='.',
模块'misc',
控制器="其他控制器",
操作='about')
}
< BR>< BR>

myspecialrouter类(guava.router.router): < BR>
定义初始化(自身):
自我注册('/hello',
guava.handler.handler(包='。,
模块'misc',
控制器="其他控制器",
动作='hello')) < BR>
定义路由(self,req):
如果req.path='/me'和req.get['name']='摇滚':
返回guava.handler.handler(包='。,
模块'me',
控制器='mecontroller',
动作='show') < BR>
不返回 < BR>
< BR>< BR>
控制器 < BR>
所有控制器都应该继承自"guava.controller.controller"。 < BR>< BR>< BR>
会话 < BR>
guava已经构建了两种会话存储解决方案,一种是内存存储,另一种是基于文件的存储。如果您想支持sso并尝试将会话存储在mc、redis或数据库中s,需要创建一个继承自内置会话存储区的新类。 < BR>
内存存储 < BR>
这对于调试特别有用。每次重新启动Guava Web服务器时,此类会话存储中的所有数据都将被删除。 < BR>

会话存储=guava.session.session store(type=guava.session.mem)
< BR>< BR>
基于文件的存储 < BR>< BR>

会话存储=guava.session.session store(类型=guava.session.file)
< BR>
自定义会话存储 < BR>
如果要实现sso,则需要使用redis、memcache、database或其他代理存储会话数据的基于中心的会话存储解决方案。 < BR>

类redisessionstore(guava.session.sessionstore): < BR>
定义初始值(self,*args,**kwargs)):
超级(mysessionstore,self)。\uu init(参数,**kwargs) < BR>
定义集(self,sid,value):
通过 < BR>
定义获取(self,sid):
通过 < BR>
定义删除(self,sid):
通过 < BR>
清除定义(self,sid):
通过 < BR>
< BR>
您需要实现四个占位符函数来构建自己的会话存储解决方案。 < BR>< BR>
依赖关系 < BR>
项目说明
--
libuv跨平台异步I/O库
http解析器c的http请求/响应解析器 < BR>< BR>
安装 < BR> 从Git安装 < BR>
``` sudo python setup.py安装``` < BR>
运行测试:`` python-m unittest discover``` < BR>< BR>
使用pip从github安装 < BR>
``` sudo pip安装-e git+https://github.com/flatpache/guava.git egg=guava``` < BR>< BR>
快速使用技巧 < BR>< > 1。在当前目录下启动Web服务器 < BR>
``python-c'导入番石榴;番石榴.server.start_static_server()'``` < BR>
与 < BR>
`` python-m simplehttpserver``` < BR>< BR>
性能 < BR>
请看我的博客。 < BR>< BR>
致谢 < BR>< BR>< > 1。[吉姆•贝克](https://github.com/jim baker) < BR>
感谢您将"番石榴"的所有权转让给PYPI。 < BR>< BR>
贡献 < BR>
我欢迎各种各样的贡献。 < BR>< > 1。为核心准则做出贡献
2。小精灵
3。实例
4。文档
5。番石榴项目的网站或标志
6。甚至要求新功能!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java HikariCP连接池Tomcat调试启用   java如何在javascript中访问JSON数组的元素?   jasper使用HttpServlet报告Java空白PDF   用于存储海量数据的java最佳集合   JBPM&springboot组织。流口水。坚持不懈jta。JtaTransactionManager在JNDI位置[java:comp/UserTransaction]未找到任何UserTransaction   java Grails maven插件需要Groovy 2.4.2   获取列表中访问最少的元素(Java 8)   java在IntelliJ中下载cn1lib不起作用   java Akka构造函数通过spring进行布线   swing在Java中创建JList时,如何更改条目的背景颜色?   为什么Java8Lambda允许访问非最终类变量?   javajavax。邮政MessaginException:无法连接到SMTP主机   java Android Webview高度在滚动后增加