塔柱金字塔类函数定义缩进



浏览挂架项目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不是。目的究竟是什么。

get_user是一个简单的函数,稍后将使用config.add_request_method(get_user, 'user', reify=True)在模块底部注册。这允许在策略方法中使用request.user

这是因为该函数未与类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)

最新更新