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 相关文章推荐
win7 下搭建sublime的python开发环境的配置方法
Jun 18 Python
python访问mysql数据库的实现方法(2则示例)
Jan 06 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
Apr 24 Python
Python通过future处理并发问题
Oct 17 Python
python+django+sql学生信息管理后台开发
Jan 11 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
python Django里CSRF 对应策略详解
Aug 05 Python
pytest中文文档之编写断言
Sep 12 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
Feb 24 Python
Python Scrapy多页数据爬取实现过程解析
Jun 12 Python
Python爬虫数据的分类及json数据使用小结
Mar 29 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
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
一步一步学习PHP(6) 面向对象
2010/02/16 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
php生成二维码
2015/08/10 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
js日期联动示例
2014/05/02 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
2018/10/30 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
Python操作mongodb的9个步骤
2018/06/04 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
详解python中的闭包
2020/09/07 Python
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
公司开会通知
2015/04/20 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python