塔金字塔类功能定义缩进

时间:2016-04-19 16:17:36

标签: python class indentation pyramid pylons

通过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 不是。究竟是什么目的。

2 个答案:

答案 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)