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装饰器在Django框架下去除冗余代码的教程
Apr 16 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
python简单实现获取当前时间
Aug 27 Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 Python
使用IDLE的Python shell窗口实例详解
Nov 19 Python
python 利用turtle库绘制笑脸和哭脸的例子
Nov 23 Python
Python numpy多维数组实现原理详解
Mar 10 Python
在Mac中PyCharm配置python Anaconda环境过程图解
Mar 11 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
python 利用opencv实现图像网络传输
Nov 12 Python
用Python实现Newton插值法
Apr 17 Python
Python基础之赋值,浅拷贝,深拷贝的区别
Apr 30 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多维数组的深度的方法
2014/01/07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
2016/05/17 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
python解析html开发库pyquery使用方法
2014/02/07 Python
python类和函数中使用静态变量的方法
2015/05/09 Python
Python3读取zip文件信息的方法
2015/05/22 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
python实现ID3决策树算法
2017/12/20 Python
PyQt5每天必学之布局管理
2018/04/19 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
使用Python进行目录的对比方法
2018/11/01 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
wxPython实现绘图小例子
2019/11/19 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
教你怎样写好自我评价
2013/10/05 职场文书
新闻编辑求职信
2014/04/09 职场文书
文案策划专业自荐信
2014/07/07 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
2016领导干部廉洁从政心得体会
2016/01/19 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
2016年校园社会综合治理宣传月活动总结
2016/03/16 职场文书
Python中json.dumps()函数的使用解析
2021/05/17 Python