通过pylon项目wiki2教程的文档发现这些代码和我所知道的类有一个函数定义,在类声明后用缩进定义。检查python文档也是一样的,但是项目文档有类似于缩进和没有缩进的类定义。任何人都可以让我明白这一点。
from pyramid.authentication import AuthTktAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy
from pyramid.security import (
Authenticated,
Everyone,
)
from .models import User
class MyAuthenticationPolicy(AuthTktAuthenticationPolicy):
def authenticated_userid(self, request):
user = request.user
if user is not None:
return user.id
def effective_principals(self, request):
principals = [Everyone]
user = request.user
if user is not None:
principals.append(Authenticated)
principals.append(str(user.id))
principals.append('role:' + user.role)
return principals
def get_user(request):
user_id = request.unauthenticated_userid
if user_id is not None:
user = request.dbsession.query(User).get(user_id)
return user
我已经粘贴了文档中的几行代码,因为我们可以看到前两个函数def是缩进的,但第三个函数 get_user 不是。究竟是什么目的。
答案 0 :(得分:1)
get_user
是一个简单的函数,稍后使用config.add_request_method(get_user, 'user', reify=True)
在模块底部注册。这样可以在策略方法中使用request.user
。
答案 1 :(得分:0)
这是因为该函数与MyAuthenticationPolicy类没有关联。只有带缩进的函数属于该类。如上所述,您正在谈论的额外功能被调用到模块的底部。没有缩进的函数与你在这里没有提供的另一个函数相关联,就像在下面的函数定义中调用的文档一样
def includeme(config):
settings = config.get_settings()
authn_policy = MyAuthenticationPolicy(
settings['auth.secret'],
hashalg='sha512',
)
config.set_authentication_policy(authn_policy)
config.set_authorization_policy(ACLAuthorizationPolicy())
config.add_request_method(get_user, 'user', reify=True)