我试图将ACL添加到Pyramid项目中的视图
我已经完成了最低限度的测试:
config.add_route('foo', '/foo')
视图:
@view_config(route_name='foo', renderer='../templates/foo.jinja2',
permission='view', context=Foo)
def foo(request):
return {}
上下文:
class Foo:
__acl__ = [
(Allow, Everyone, 'view'),
]
如果没有设置权限和上下文,哪个效果很好,但添加后,我会得到pyramid.httpexceptions.HTTPNotFound: /foo
。
为什么突然找不到这条路线?这几乎完全是从教程中复制的。
答案 0 :(得分:1)
您不应在view_config
中指定上下文,而是在路线中指定工厂。
config.add_route('foo', '/foo', factory=lambda r: Foo(r))
此外,您可能必须接受__init__
:
class Foo:
def __init__(self, request):
pass
__acl__ = [
(Allow, Everyone, 'view'),
]
您的方式(使用context
中的view_config
)表示“如果上下文为Foo
,请使用该视图函数”。这是一个谓词。