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将unicode转为str的方法
Jun 21 Python
Python快速排序算法实例分析
Nov 29 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
理论讲解python多进程并发编程
Feb 09 Python
Python实现对一个函数应用多个装饰器的方法示例
Feb 09 Python
学生信息管理系统python版
Oct 17 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
Python如何实现强制数据类型转换
Nov 22 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
Python request中文乱码问题解决方案
Sep 17 Python
python 三种方法实现对Excel表格的读写
Nov 19 Python
Python爬虫新手入门之初学lxml库
Dec 20 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下MAIL的另一解决方案
2006/10/09 PHP
用php过滤危险html代码的函数
2008/07/22 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
2009/01/30 Javascript
Javascript学习笔记8 用JSON做原型
2010/01/11 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
jQuery解决input超多的表单提交
2015/08/10 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
Axios学习笔记之使用方法教程
2017/07/21 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
简洁的十分钟Python入门教程
2015/04/03 Python
python实现基本进制转换的方法
2015/07/11 Python
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
python web基础之加载静态文件实例
2018/03/20 Python
Django中的ajax请求
2018/10/19 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
python中threading开启关闭线程操作
2020/05/02 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
国庆促销活动总结
2014/08/29 职场文书
美容院管理规章制度
2015/08/05 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫