PythonWeb框架Pylons中使用MongoDB的例子
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初始化函数和映射对象:
frommingimportSession
frommingimportschema
fromming.ormimportMappedClass
fromming.ormimportFieldProperty,ForeignIdProperty,RelationProperty
fromming.ormimportThreadLocalORMSession
session=None
definit_single_model(model_class):
model_class.__mongometa__.session=session
classPage(MappedClass):
class__mongometa__:
session=session
name="pages"
_id=FieldProperty(schema.ObjectId)
title=FieldProperty(str)
content=FieldProperty(str)
definit_model(engine):
globalsession
session=ThreadLocalORMSession(doc_session=Session(engine))
init_single_model(Page)
MappedClass.compile_all()
在PROJECT/config/environment.py中进行初始化:
from..modelimportinit_model
fromming.datastoreimportDataStore
defload_environment(global_conf,app_conf):
...
#CreatetheMakoTemplateLookup,withthedefaultauto-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=["fromwebhelpers.htmlimportescape"])
#Setupthemongodbdatabaseengine
init_model(DataStore(config["database.uri"]))
#CONFIGURATIONOPTIONSHERE(note:allconfigoptionswilloverride
#anyPylonsconfigoptions)
returnconfig
最后在development.ini中加入MongoDB的配置项:
如果需要在程序安装时初始化一些数据,可以在PROJECT/websetup.py中加入 importpylons.test from.config.environmentimportload_environment log=logging.getLogger(__name__) defsetup_app(command,conf,vars): log.info("Addingdemodata.") 这里使用了Ming库来连接MongoDB并做简单的ORM。Ming库是对PyMongo的ORM包装库。它是SourceForge用TurboGears和MongoDB对网站进行重构的副产物。使用起来有点象SQLAlchemyORM。在上面的示例中,也可以把Ming替换成MongoKit或其它MongoDB的ORM库,甚至直接用PyMongo也无不可。
[app:main]
database.uri=mongodb://localhost:27017/test
"""Setupthewukongapplication"""
importlogging
from.importmodel
"""Placeanycommandstosetupwukonghere"""
#Don"treloadtheappifitwasloadedunderthetestingenvironment
ifnotpylons.test.pylonsapp:
load_environment(conf.global_conf,conf.local_conf)
page=model.Page(title="demo",content="Thisisfordemo.")
model.session.flush()
log.info("Successfullysetup.")
有种感觉,MongoDB会火。相关文章