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自动格式化json文件的方法
Mar 11 Python
在Python中实现贪婪排名算法的教程
Apr 17 Python
深入解析Python中的WSGI接口
May 11 Python
用python实现简单EXCEL数据统计的实例
Jan 24 Python
用Python登录好友QQ空间点赞的示例代码
Nov 04 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
浅谈pyqt5中信号与槽的认识
Feb 17 Python
用Python写一个自动木马程序
Sep 17 Python
python之列表推导式的用法
Nov 29 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 Python
通过实例解析python and和or使用方法
Nov 14 Python
Python max函数中key的用法及原理解析
Jun 26 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
php实现ping
2006/10/09 PHP
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
js实现可拖动DIV的方法
2013/12/17 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
2014/06/30 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
javascript求日期差的方法
2016/03/02 Javascript
浅析Ajax语法
2016/12/05 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
vue中实现滚动加载更多的示例
2017/11/08 Javascript
vue+springboot前后端分离实现单点登录跨域问题解决方法
2018/01/30 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
Draper James官网:知名演员瑞茜·威瑟斯彭所创品牌
2017/10/25 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
工作自我评价分享
2013/12/01 职场文书
团委书记的竞聘演讲稿
2014/04/24 职场文书
工作说明书范文
2014/05/07 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书