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中用于计算指数的exp()方法
May 14 Python
python根据list重命名文件夹里的所有文件实例
Oct 25 Python
Python读取excel指定列生成指定sql脚本的方法
Nov 28 Python
通过PHP与Python代码对比的语法差异详解
Jul 10 Python
python实现回旋矩阵方式(旋转矩阵)
Dec 04 Python
实现Python与STM32通信方式
Dec 18 Python
python range实例用法分享
Feb 06 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
Apr 19 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
Jan 05 Python
conda安装tensorflow和conda常用命令小结
Feb 20 Python
python爬不同图片分别保存在不同文件夹中的实现
Apr 02 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
curl实现站外采集的方法和技巧
2014/01/31 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
jQuery 性能优化指南(2)
2009/05/21 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
JQuery的Ajax跨域请求原理概述及实例
2013/04/26 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
python简单判断序列是否为空的方法
2015/06/30 Python
python实现自动重启本程序的方法
2015/07/09 Python
Python实现统计代码行的方法分析
2017/07/12 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
Python3 批量扫描端口的例子
2019/07/25 Python
Python request中文乱码问题解决方案
2020/09/17 Python
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
大学生职业生涯规划大赛作品(精品)
2014/09/17 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
暑期社会实践证明书
2014/11/17 职场文书
MySQL入门命令之函数-单行函数-流程控制函数
2021/04/05 MySQL
Pandas加速代码之避免使用for循环
2021/05/30 Python
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server