python - 无法让 Pyramid 识别 Mongo
问题描述
我正在尝试让 Pyramid Web 框架使用 Mongo 处理请求,但我对两者都是相对新手。我无法让我的视图识别附加到请求的数据库。
在development.ini
:
###
# configure mongodb
###
mongo_uri = mongodb://localhost:27017/nomad
__init__.py
导入和main
功能:
# imports for Mongodb
from urllib.parse import urlparse
from gridfs import GridFS
from pymongo import MongoClient
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
config = Configurator(settings=settings)
init_includes(config)
init_routing(config)
db_url = urlparse(settings['mongo_uri'])
config.registry.db = MongoClient(
host=db_url.hostname,
port=db_url.port,
)
def add_db(request):
db = config.registry.db[db_url.path[1:]]
if db_url.username and db_url.password:
db.authenticate(db_url.username, db_url.password)
return db
def add_fs(request):
return GridFS(request.db)
config.add_request_method(add_db, 'db', reify=True)
config.add_request_method(add_fs, 'fs', reify=True)
config.scan()
return config.make_wsgi_app()
在jobscontroller.py
中,这是发出请求的处理程序视图:
import pyramid_handlers
from nomad.controllers.base_controller import BaseController
class JobsController(BaseController):
@pyramid_handlers.action(renderer='templates/jobs/index.pt')
def index(request):
all_jobs = request.db['jobs'].find()
return {'all_jobs': all_jobs}
我收到一个错误:
all_jobs = request.db['jobs'].find()
AttributeError: 'JobsController' object has no attribute 'db'
我正在使用 Pyramid 处理程序来管理路由和视图,我知道所有这些都有效,因为我的所有路由都解析并交付网页。只有作业控制器很时髦,而且只有在我尝试添加 request.db 调用之后。
有人可以帮我理解发生了什么吗?
解决方案
您不是指请求 - 您指的是对象本身(通常命名为self
,但您已命名它request
- 如果它只是一个函数而不是对象上的方法,这将起作用)。由于您位于类的对象中,因此第一个参数始终是对象本身:
class JobsController(BaseController):
@pyramid_handlers.action(renderer='templates/jobs/index.pt')
def index(self, request):
all_jobs = request.db['jobs'].find()
return {'all_jobs': all_jobs}
推荐阅读
- javascript - 在 React 和 Redux 中删除页面/路由后重定向
- phpmyadmin - 禁止访问 phpmyadmin
- c - C中的bsearch函数和结构
- android - 如何使用 Kotlin 从 WEB 向 MutableList 添加项目(元素)?
- r - 用数字序列替换文件之间的匹配项
- performance - 对于复杂的计算和聚合,Linq 或 SQL 查询更好吗?
- python - (Python,Selenium)是否只有当属性符合条件时才能获取文本列表?
- reactjs - React Navigation 关闭动画过渡
- rabbitmq - RabbitMQ 独占队列与独占消费者有什么区别?
- php - 如何从仍在 PHP 中运行的进程中获取部分输出?