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连接mysql并提交mysql事务示例
Mar 05 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
浅谈python的输入输出,注释,基本数据类型
Apr 02 Python
python设计tcp数据包协议类的例子
Jul 23 Python
在tensorflow中设置保存checkpoint的最大数量实例
Jan 21 Python
基于python实现MQTT发布订阅过程原理解析
Jul 27 Python
Python Pivot table透视表使用方法解析
Sep 11 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
Sep 15 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 Python
python实现磁盘日志清理的示例
Nov 05 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 Python
Python+DeOldify实现老照片上色功能
Jun 21 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
DOMXML函数笔记
2006/10/09 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
PHP实现获取域名的方法小结
2014/11/05 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
WebStorm ES6 语法支持设置&babel使用及自动编译(详解)
2017/09/08 Javascript
vue与TypeScript集成配置最简教程(推荐)
2017/10/17 Javascript
解决vue-cli3 使用子目录部署问题
2018/07/19 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
Python类装饰器实现方法详解
2018/12/21 Python
基于Django统计博客文章阅读量
2019/10/29 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
教育科学研究生自荐信
2013/10/09 职场文书
导游的职业规划书范文
2013/12/27 职场文书
实习单位接收函模板
2014/01/10 职场文书
入队仪式主持词
2015/07/04 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL