Python Web框架Pylons中使用MongoDB的例子


Posted in Python onDecember 03, 2013

Pylons 经过漫长的开发,终于放出了 1.0 版本。对于正规的产品开发来说,1.0 版本的意义很大,这表明 Pylons 的 API 终于稳定下来了。

Pylons 虽是山寨 Rails 而生,但作为一个纯 Python 的 Web 框架,它有一个鲜明的特点:可定制性强。框架每一层都没重新发明轮子,而是尽量整合现有的 Python 库。在 MVC 的 Model 层,Pylons 默认支持 SQLAlchemy。现在 NoSQL 很火 MongoDB 很热。在 Pylons 中应用 MongoDB 也很简单。下面是一个简单的示例。

在 PROJECT/model/__init__.py 中定义 MongoDB 初始化函数和映射对象:

from ming import Session
from ming import schema
from ming.orm import MappedClass
from ming.orm import FieldProperty, ForeignIdProperty, RelationProperty
from ming.orm import ThreadLocalORMSession
session = None
def init_single_model(model_class):
    model_class.__mongometa__.session = session
class Page(MappedClass):
    class __mongometa__:
        session = session
        name = 'pages'
    _id = FieldProperty(schema.ObjectId)
    title = FieldProperty(str)
    content = FieldProperty(str)
def init_model(engine):
    global session
    session = ThreadLocalORMSession(doc_session=Session(engine))
    init_single_model(Page)
    MappedClass.compile_all()

在 PROJECT/config/environment.py 中进行初始化:

from ..model import init_model
from ming.datastore import DataStore
def load_environment(global_conf, app_conf):
    ...
    # Create the Mako TemplateLookup, with the default auto-escaping
    config['pylons.app_globals'].mako_lookup = TemplateLookup(
        directories=paths['templates'],
        error_handler=handle_mako_error,
        module_directory=os.path.join(app_conf['cache_dir'], 'templates'),
        input_encoding='utf-8', default_filters=['escape'],
        imports=['from webhelpers.html import escape'])
    # Setup the mongodb database engine
    init_model(DataStore(config['database.uri']))
    # CONFIGURATION OPTIONS HERE (note: all config options will override
    # any Pylons config options)
    return config

最后在 development.ini 中加入 MongoDB 的配置项:

[app:main]
database.uri = mongodb://localhost:27017/test

如果需要在程序安装时初始化一些数据, 可以在 PROJECT/websetup.py 中加入

"""Setup the wukong application"""
import logging
import pylons.test
from .config.environment import load_environment
from . import model
log = logging.getLogger(__name__)
def setup_app(command, conf, vars):
    """Place any commands to setup wukong here"""
    # Don't reload the app if it was loaded under the testing environment
    if not pylons.test.pylonsapp:
        load_environment(conf.global_conf, conf.local_conf)
        log.info("Adding demo data.")
        page = model.Page(title='demo', content='This is for demo.')
        model.session.flush()
        log.info("Successfully set up.")

这里使用了 Ming 库来连接 MongoDB 并做简单的 ORM。Ming 库是对 PyMongo 的 ORM 包装库。它是 SourceForge 用 TurboGears 和 MongoDB 对网站进行重构的副产物。使用起来有点象 SQLAlchemy ORM 。在上面的示例中,也可以把 Ming 替换成 MongoKit 或其它 MongoDB 的 ORM 库,甚至直接用 PyMongo 也无不可。
有种感觉,MongoDB 会火。

Python 相关文章推荐
Python将阿拉伯数字转换为罗马数字的方法
Jul 10 Python
Tensorflow简单验证码识别应用
May 25 Python
Python实现的rsa加密算法详解
Jan 24 Python
Request的中断和ErrorHandler实例解析
Feb 12 Python
python unittest实现api自动化测试
Apr 04 Python
Python requests模块实例用法
Feb 11 Python
python如何输出反斜杠
Jun 18 Python
python如何快速拼接字符串
Oct 28 Python
使用python对excel表格处理的一些小功能
Jan 25 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 Python
pandas map(),apply(),applymap()区别解析
Feb 24 Python
Elasticsearch 批量操作
Apr 19 Python
python将xml xsl文件生成html文件存储示例讲解
Dec 03 #Python
python使用reportlab画图示例(含中文汉字)
Dec 03 #Python
python33 urllib2使用方法细节讲解
Dec 03 #Python
python使用mysqldb连接数据库操作方法示例详解
Dec 03 #Python
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 #Python
python paramiko实现ssh远程访问的方法
Dec 03 #Python
Python使用urllib2获取网络资源实例讲解
Dec 02 #Python
You might like
PHP 类商品秒杀计时实现代码
2010/05/05 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
js判断鼠标左、中、右键哪个被点击的方法
2015/01/27 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
js技巧之十几行的代码实现vue.watch代码
2018/06/09 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
原生js实现购物车功能
2020/09/23 Javascript
Python重新引入被覆盖的自带function
2014/07/16 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
python获取文件真实链接的方法,针对于302返回码
2018/05/14 Python
python 求定积分和不定积分示例
2019/11/20 Python
英国赛车、汽车改装和摩托车零件购物网站:Demon Tweeks
2018/10/29 全球购物
解释i节点在文件系统中的作用
2013/11/26 面试题
电气自动化大学生求职信
2013/10/16 职场文书
业务助理岗位职责
2013/11/18 职场文书
捐资助学倡议书
2014/04/15 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
大学生村官个人总结
2015/02/15 职场文书
研讨会致辞
2015/07/31 职场文书
PHP基本语法
2021/03/31 PHP