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下载FTP上的文件夹的实现代码
Feb 10 Python
python实现的各种排序算法代码
Mar 04 Python
用python删除java文件头上版权信息的方法
Jul 31 Python
Python 创建子进程模块subprocess详解
Apr 08 Python
python 爬取微信文章
Jan 30 Python
基于Django filter中用contains和icontains的区别(详解)
Dec 12 Python
解决python写入带有中文的字符到文件错误的问题
Jan 31 Python
python3.6根据m3u8下载mp4视频
Jun 17 Python
Python shelve模块实现解析
Aug 28 Python
简单介绍django提供的加密算法
Dec 18 Python
python序列类型种类详解
Feb 26 Python
在keras里面实现计算f1-score的代码
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获取网页内容方法总结
2008/12/04 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
JS 遮照层实现代码
2010/03/31 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
再探JavaScript作用域
2014/09/24 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
老生常谈jquery id选择器和class选择器的区别
2017/02/12 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
浅谈Angular 观察者模式理解
2018/11/01 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
简单的通用表达式求10乘阶示例
2014/03/03 Python
Python中类型关系和继承关系实例详解
2015/05/25 Python
在Django中创建第一个静态视图
2015/07/15 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
python读取excel表格生成erlang数据
2017/08/26 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
什么是python的必选参数
2020/06/21 Python
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
双拥工作宣传标语
2014/06/26 职场文书
公司周年庆典标语
2014/10/07 职场文书
利用Matlab绘制各类特殊图形的实例代码
2021/07/16 Python
JavaScript实现优先级队列
2021/12/06 Javascript