相对于Django,bottle可以看成是一个非常精巧的python web framework了,只有一个文件就可以使用了。于是想用这个东西在gae做个简单的demo。

1. GAE+bottle

http://pypi.python.org/pypi/bottle

copy那个bottle.py到gae工程的目录里,现在,可以写一个很简短的代码来测试一下:

main.py

from bottle import route, default_app
from google.appengine.ext.webapp.util import run_wsgi_app@route
def index():return 'Hello world!'def main():'''Remove this when on production '''bottle.debug(True)app = default_app()    run_wsgi_app(app)
if __name__ == '__main__':main()

同时,要修改app.yaml文件:

handlers:
- url: /.*script: main.py

现在,就可以直接运行GAE,查看结果了!就这么简单!

2. GAE+bottle+beaker

在GAE+bottle的组合中,如果要使用session的话,查询到bottle的原话如下:

How to implement sessions?

There is no build in support for sessions because there is no right way to do it. Depending on requirements and environment you could use beaker middleware with a fitting backend or implement it yourself.

很清楚的告诉我们,如果要使用session的话,可以考虑beaker,从这里下载:

http://pypi.python.org/pypi/Beaker

下载下来后,把里面的一个beaker文件夹,copy到GAE工程目录中,会作为一个package来使用。

在上面的程序修改如下:

main.py

from bottle import route, default_app
from beaker.middleware import SessionMiddleware
from google.appengine.ext.webapp.util import run_wsgi_app@route('/')
def index():
    session = request.environ['beaker.session']if 'refrush_times' in session:refrush_times = int(session['refrush_times'])else:refrush_times = 0refrush_times = refrush_times + 1session['refrush_times'] = refrush_timesreturn 'Hello world! You have refrush this page for %s times.' % str(refrush_times)

def main():'''Remove this when on production '''bottle.debug(True)app = default_app()    session_opts = {'session.type': 'ext:google','session.cookie_expires': True,'session.auto': True,}app = SessionMiddleware(app, session_opts)
    run_wsgi_app(app)
if __name__ == '__main__':main()

    注意,session_opts里的session.type,如果在GAE下使用,一定要选ext:google,这个是我测试了几个选项之后才发现的。如果你有更好的方法,也欢迎告诉我,谢谢。

3. GAE+bottle+beaker+jinja2

因为我之前只用过django的template engine,所以我在这里使用和django template用法差不多的jinja2,下载jiaja2:

http://pypi.python.org/pypi/pip

把里面的jinja2的目录copy到GAE工程目录。

main.py

from bottle import route, default_app
from beaker.middleware import SessionMiddleware
from google.appengine.ext.webapp.util import run_wsgi_app
from bottle import jinja2_view as view

@route('/')
@view('templates/index.html')
def index():session = request.environ['beaker.session']if 'refrush_times' in session:refrush_times = int(session['refrush_times'])else:refrush_times = 0refrush_times = refrush_times + 1session['refrush_times'] = refrush_times
    return {'hello_world_str':'Hello world! You have refrush this page for %s times.' % str(refrush_times)}

def main():'''Remove this when on production '''bottle.debug(True)app = default_app()session_opts = {'session.type': 'ext:google','session.cookie_expires': True,'session.auto': True,}app = SessionMiddleware(app, session_opts)run_wsgi_app(app)
if __name__ == '__main__':main()

接下来需要在GAE工程目录中创建一个templates目录,然后在里面创建一个index.html的模板

template/index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SNS User OAUTH Demo</title>
</head>
<body><p>{{ hello_world_str }}</p>
</body>
</html>

OK,现在这个DEMO就算完成了。

ps:发现bottle几个不方便的地方:

1. request没有像django的request有一些对url进行方便操作的方法,这个需要自己去实现,比如django的request.build_absolute_uri(),我是这样去实现的:

from urlparse import urlparse
    o = urlparse(request.url)
    callback = '%s://%s/%s' % (o.scheme, o.netloc, 'oauth_callback')

2. 在这种组合下,我还没有发现如何去实现i18n,对于django来说,只需要在locate目录下创建对应语言的资源文件就行了,同时django还提供了makemessages这样的工具,非常方便,而bottle+jinja2我还没有发现如何去实现,也请已经实现了的朋友告诉我如何实现,非常感谢。

总之,bottle是一个非常精巧的python web框架,对于一些快速的开发demo来说,非常方便,毕竟django里的很多功能是用不上的!

转载于:https://www.cnblogs.com/lettoo/archive/2011/02/25/1965200.html

GAE+bottle+jinja2+beaker快速开发demo相关推荐

  1. listView无需适配器添加数据(写demo快速开发)entries属性的特殊用法

    先看下简单的布局代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  2. 利用UltimateAndroid框架进行快速开发

    UltimateAndroid是一套集成了许多现有优秀的Android开源类库并将之组合成一个整体的Android快速开发框架.框架目前主要包含的功能有View Injection,ORM,异步网络请 ...

  3. SNF快速开发平台MVC-高级查询组件

    1.   高级查询 在我们做项目的时候经常想要按名称.编号进行查询数据,可在开发时会把最常用的查询条件写上,不常用的就不写了,也是因为把所有字段都写上太多了,布局不好看而且不实用.还有些查询条件几百年 ...

  4. vue手机端回退_推荐3个快速开发平台 前后端都有 接私活又有着落了

    经常性逛github,发现了一些优秀的开源项目,其中的框架及代码非常不错,现在给大家推荐三个快速开发平台. 第一个就是优秀的Jeecg-boot快速开发平台 前端采用阿里的ant-design-vue ...

  5. 推荐3个快速开发平台 前后端都有 项目经验又有着落了

    今日推荐 推荐一款开源 Java 版的视频管理系统 我是培训机构出身的程序员,不敢告诉任何人 14个项目 经常性逛github,发现了一些优秀的开源项目,其中的框架及代码非常不错,现在给大家推荐三个快 ...

  6. JEECG 3.7跨时代重构精华版发布,企业级JAVA快速开发平台

    为什么80%的码农都做不了架构师?>>>    JEECG 3.7 跨时代重构精华版发布,企业级J2EE快速开发平台 -------------------------------- ...

  7. JavaEE企业级快速开发平台jeesite4的使用和快速搭建项目

    场景 JeeSIte是一个JavaEE企业级快速开发平台,基于经典技术组合(SpringBoot.Apache Shiro .MyBatis.Beetl.Bootstrap)在线代码生成工具,支持Sp ...

  8. wordcount代码_通过腾讯云 Serverless Regsitry 快速开发与部署一个 WordCount 实例

    在学习 MapReduce 的过程中,不少人接触的第一个项目就是单词计数.单词计数通过两个函数 Map 和 Reduce,可以快速地统计出文本文件中每个单词出现的个数,它虽然简单,但也是最能体现 Ma ...

  9. 用ionic快速开发hybird App(已附源码,在下面+总结见解)

    用ionic快速开发hybird App(已附源码,在下面+总结见解) 1.ionic简介 ionic 是用于敏捷开发APP的解决方案.核心思路是:利用成熟的前端开发技术,来写UI和业务逻辑.也就是说 ...

  10. 如何快速开发一个 Dubbo 应用?(含沙龙报名)

    阿里妹导读:在分布式系统中,远程调用是最基础也是最重要的基石.历史上,曾经先后出现过 CORBA.RMI.EJB.WebService 等技术和规范,在服务化以及微服务日趋流行的今天,更多的被广泛使用 ...

最新文章

  1. WPF窗口继承实现统一风格的自定义窗口
  2. Uploadify3.2中文提示
  3. HDU - 2732 Leapin' Lizards(最大流+思维建边)
  4. 在Centos 7中开放80端口
  5. 字符串循环右移的一道题目
  6. oracle 如何查看当前用户的表空间名称
  7. Python面向对象介绍
  8. 【Elasticsearch】 海量 分词器 在线地址 与文档
  9. java中的 BigDecimal 和 String 的相互转换
  10. ROS学习笔记一:安装配置ROS环境
  11. 【mac】Snagit截图时候鼠标变大太大的解决方法
  12. 矩阵分解——三角分解(Cholesky 分解)
  13. 由一道习题看如何设计浮点数
  14. c语言编程多分支,C语言编程(练习4:分支和跳转 )
  15. 软件测试中的测试文档
  16. NeurIPS2020 Generalized Focal Loss论文翻译
  17. 皮皮胡位置设定服务器,逆水寒买橘子给皮皮寒任务完成方法
  18. 新概念模拟电路——晶体管构建的放大电路静态分析
  19. 硕士毕业论文格式总结
  20. 《OpenGL超级宝典》环境搭建

热门文章

  1. 【微信H5开发】the permission value is offline verifying
  2. prison break
  3. 手机b站封面提取网站_二次元之家 视频网站B站上海与北京办公设计欣赏
  4. Unity XR Interaction Toolkit 组件解析(一)Action-based 和 Device-based 的区别
  5. Open vStorage —— 虚拟化的存储路由系统
  6. 运维分级发布_故障分级和处罚规范-运维必备规章制度
  7. Andriod 实现一个类微信聊天界面 (二)
  8. 小白如何成长为一名黑客
  9. linux删除文件名的文件夹,Linux删除文件夹和修改文件名
  10. OpenNLP进行中文命名实体识别(下:载入模型识别实体)