zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

PythonWeb框架Pylons中使用MongoDB的例子

MongoDB框架 使用 例子 PythonWeb
2023-06-13 09:15:13 时间

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的配置项:

复制代码代码如下:
[app:main]
database.uri=mongodb://localhost:27017/test

如果需要在程序安装时初始化一些数据,可以在PROJECT/websetup.py中加入

复制代码代码如下:
"""Setupthewukongapplication"""
importlogging

importpylons.test

from.config.environmentimportload_environment
from.importmodel

log=logging.getLogger(__name__)

defsetup_app(command,conf,vars):
   """Placeanycommandstosetupwukonghere"""
   #Don"treloadtheappifitwasloadedunderthetestingenvironment
   ifnotpylons.test.pylonsapp:
       load_environment(conf.global_conf,conf.local_conf)

       log.info("Addingdemodata.")
       page=model.Page(title="demo",content="Thisisfordemo.")
       model.session.flush()
       log.info("Successfullysetup.")

这里使用了Ming库来连接MongoDB并做简单的ORM。Ming库是对PyMongo的ORM包装库。它是SourceForge用TurboGears和MongoDB对网站进行重构的副产物。使用起来有点象SQLAlchemyORM。在上面的示例中,也可以把Ming替换成MongoKit或其它MongoDB的ORM库,甚至直接用PyMongo也无不可。
有种感觉,MongoDB会火。