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魔术方法详解
Feb 14 Python
解读Python中degrees()方法的使用
May 18 Python
python计算日期之间的放假日期
Jun 05 Python
python 字典中取值的两种方法小结
Aug 02 Python
Python面向对象之接口、抽象类与多态详解
Aug 27 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
使用turtle绘制五角星、分形树
Oct 06 Python
Python搭建代理IP池实现获取IP的方法
Oct 27 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
详解python网络进程
Jun 15 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函数,php爱好者站推荐
2007/03/19 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
jQuery使用$.each遍历json数组的简单实现方法
2016/04/18 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
canvas仿iwatch时钟效果
2017/03/06 Javascript
vuejs如何配置less
2017/04/25 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
Python自动发邮件脚本
2017/03/31 Python
python表格存取的方法
2018/03/07 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
django表单的Widgets使用详解
2019/07/22 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
商务英语专业应届毕业生求职信
2013/10/28 职场文书
小学教学随笔感言
2014/02/26 职场文书
医院标语大全
2014/06/23 职场文书
学校社团活动总结
2015/05/07 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis