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中用于去除空格的三个函数的使用小结
Apr 07 Python
Python base64编码解码实例
Jun 21 Python
Python中使用多进程来实现并行处理的方法小结
Aug 09 Python
python实现二分查找算法
Sep 21 Python
python timestamp和datetime之间转换详解
Dec 11 Python
详解python中Numpy的属性与创建矩阵
Sep 10 Python
一行代码让 Python 的运行速度提高100倍
Oct 08 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
Python assert关键字原理及实例解析
Dec 13 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
matplotlib实现数据实时刷新的示例代码
Jan 05 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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 mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
jquery图片切换插件
2015/03/16 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
JavaScript Canvas实现验证码
2020/08/02 Javascript
bootstrap-table+treegrid实现树形表格
2019/07/26 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
Python栈算法的实现与简单应用示例
2017/11/01 Python
python2.7到3.x迁移指南
2018/02/01 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
解决yum对python依赖版本问题
2019/07/05 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
浅析Python 字符编码与文件处理
2020/09/24 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
市场部业务员岗位职责
2014/04/02 职场文书
客户答谢会致辞
2015/01/20 职场文书
小学数学教学随笔
2015/08/14 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书
python 命令行传参方法总结
2021/05/25 Python