MongoDB和 Pyramid¶
基础¶
如果您想通过Pyramid使用MangGDB(通过PyMongo和GRIDFS),您可以使用以下模式使您的Mango数据库作为请求属性可用。
First add the MongoDB URI to your development.ini
文件。(注: user
, password
和 port
are not required.)
1 [app:myapp]
2 # ... other settings ...
3 mongo_uri = mongodb://user:password@host:port/database
然后在你 __init__.py
,设置使数据库附加到每个新请求::
1from pyramid.config import Configurator
2
3try:
4 # for python 2
5 from urlparse import urlparse
6except ImportError:
7 # for python 3
8 from urllib.parse import urlparse
9
10from gridfs import GridFS
11from pymongo import MongoClient
12
13
14def main(global_config, **settings):
15 """ This function returns a Pyramid WSGI application.
16 """
17 config = Configurator(settings=settings)
18 config.add_static_view('static', 'static', cache_max_age=3600)
19
20 db_url = urlparse(settings['mongo_uri'])
21 config.registry.db = MongoClient(
22 host=db_url.hostname,
23 port=db_url.port,
24 )
25
26 def add_db(request):
27 db = config.registry.db[db_url.path[1:]]
28 if db_url.username and db_url.password:
29 db.authenticate(db_url.username, db_url.password)
30 return db
31
32 def add_fs(request):
33 return GridFS(request.db)
34
35 config.add_request_method(add_db, 'db', reify=True)
36 config.add_request_method(add_fs, 'fs', reify=True)
37
38 config.add_route('dashboard', '/')
39 # other routes and more config...
40 config.scan()
41 return config.make_wsgi_app()
备注
Configurator.add_request_method
has been available since Pyramid 1.4. 你可以使用 Configurator.set_request_property
for Pyramid 1.3.
此时,在视图代码中,可以使用 request.db
作为PyMongo数据库连接。例如::
1@view_config(route_name='dashboard',
2 renderer="myapp:templates/dashboard.pt")
3def dashboard(request):
4 vendors = request.db['vendors'].find()
5 return {'vendors':vendors}
脚手架¶
Niall O'Higgins提供了 pyramid_mongodb Pyramid 的脚手架,提供了一个简单的方法开始 Pyramid 和MongoDB。
视频¶
尼尔-奥希金斯在旧金山Mongo会议上发表了一个演讲。
其他信息¶
Pyramid、AKET和MongoDB:http://niallohiggins.com/2011/05/18/mongodb-python-pyramid-akhetz/