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之深入变量和引用对象
Sep 24 Python
python 接口测试response返回数据对比的方法
Feb 11 Python
python批量获取html内body内容的实例
Jan 02 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
python开发游戏的前期准备
May 05 Python
python 实现在tkinter中动态显示label图片的方法
Jun 13 Python
Python利用matplotlib做图中图及次坐标轴的实例
Jul 08 Python
Python实现平行坐标图的绘制(plotly)方式
Nov 22 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
Jan 09 Python
Python基于Tensor FLow的图像处理操作详解
Jan 15 Python
Python尝试实现蒙特卡罗模拟期权定价
Apr 21 Python
 python中的元类metaclass详情
May 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
我的论坛源代码(九)
2006/10/09 PHP
php遍历CSV类实例
2015/04/14 PHP
orm获取关联表里的属性值
2016/04/17 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
javascript 类定义的4种方法
2009/09/12 Javascript
javascript URL编码和解码使用说明
2010/04/12 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
jquery结婚电子请柬特效源码分享
2015/08/21 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
bootstrap选项卡扩展功能详解
2017/06/14 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
PyQt5每天必学之事件与信号
2018/04/20 Python
python opencv实现图像边缘检测
2019/04/29 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
日本运动品牌美津浓官方购物网站:MIZUNO SHOP
2016/08/21 全球购物
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
英智兴达软件测试笔试题
2016/10/12 面试题
施工材料员岗位职责
2014/02/12 职场文书
安全生产汇报材料
2014/02/17 职场文书
大学军训感言400字
2014/03/11 职场文书
员工生日会策划方案
2014/06/14 职场文书
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技