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 相关文章推荐
在Windows中设置Python环境变量的实例讲解
Apr 28 Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 Python
Python实现元素等待代码实例
Nov 11 Python
Python切片列表字符串如何实现切换
Aug 06 Python
Python代码注释规范代码实例解析
Aug 14 Python
浅谈Python __init__.py的作用
Oct 28 Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 Python
python3.9.1环境安装的方法(图文)
Feb 02 Python
python实现银行账户系统
Feb 22 Python
如何在C++中调用Python
May 21 Python
总结Python变量的相关知识
Jun 28 Python
python编程实现清理微信重复缓存文件
Nov 01 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
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
php头像上传预览实例代码
2017/05/02 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
python基础教程之缩进介绍
2014/08/29 Python
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
金融专业毕业生推荐信
2013/11/26 职场文书
大一期末自我鉴定
2013/12/13 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
优秀班集体申报材料
2014/12/25 职场文书
老干部座谈会主持词
2015/07/03 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技