Traitement des insertions avant et après la fonction de vue avec le propre décorateur de vue de Pyramid

[2015/3/20 Mise à jour du contenu trouvé par diverses enquêtes. Quelque chose de différent]

L'authentification de l'utilisateur est disponible et le nom d'utilisateur est affiché dans la partie d'en-tête de n'importe quel écran de la page authentifiée, et le traitement standard lors de la création d'une application Web commune est automatisé.

--Définissez un view_decorator qui permet à la vue de s'exécuter uniquement si vous êtes authentifié et disposez de l'autorisation utilisateur

def permission_view_config(permission):
    def pvc(**params):
        settings = dict(permission=permission, _depth=1)
        settings.update(params)

        def wrapped_view_config(original_func):
            return view_config(**settings)(original_func)
        return wrapped_view_config
    return pvc


user_view_config = permission_view_config('user')
admin_view_config = permission_view_config('admin')

__init__.py


def groupfinder(user_code, request):
    if not request.user:
        return []
    elif request.user.is_admin:
        return ['group:users', 'group:admin']
    else:
        return ['group:users']


def get_user(request):
    user_id = unauthenticated_userid(request)
    if user_id is not None:
        return DBSession.query(User).get(user_id)


class RootFactory(object):
    __acl__ = [
        (Allow, 'group:users', 'user'),
        (Allow, 'group:admin', 'admin')
    ]

    def __init__(self, request):
        pass


def main(global_config, **settings):
    # ...
    config = Configurator(settings=settings, root_factory='.RootFactory')

    #Obtenir lorsque vous accédez à la propriété utilisateur de la demande_Spécifiez que vous devez être un utilisateur. C'est important.
    config.set_request_property(get_user, 'user', reify=True)

    authn_policy = AuthTktAuthenticationPolicy('...', callback=groupfinder, hashalg='sha512')
    authz_policy = ACLAuthorizationPolicy()
    config.set_authentication_policy(authn_policy)
    config.set_authorization_policy(authz_policy)
    # ...

Si vous l'utilisez comme ça

views.py


@user_view_config(route_name='index', renderer='templates/index.jinja2')
def index(request):
    #Ceci est uniquement pour les personnes qui ont l'autorisation d'utilisateur
    do_something_with(request.user)  #l'utilisateur peut être utilisé
    return {'name': 'my_app'}

@admin_view_config(route_name='index', renderer='templates/add_user.jinja2')
def add_user(request):
    #Ceci est uniquement pour ceux qui ont l'autorisation d'administrateur
    do_something_with(request.user)  #l'utilisateur peut être utilisé
    return {'name': 'my_app'}

inspiré par Implémenter un décorateur de vue personnalisé avec Pyramid

Recommended Posts

Traitement des insertions avant et après la fonction de vue avec le propre décorateur de vue de Pyramid
Notifier le contenu de la tâche avant et après l'exécution de la tâche avec Fabric
Afficher le résultat du traitement de la géométrie en Python
Comment définir Decorator et Decomaker avec une seule fonction
Supprimer les espaces pleine largeur avant et après la chaîne (python)
Une fonction qui mesure le temps de traitement d'une méthode en python
[C / C ++] [GCC] __attribute __ ((constructeur)) pour exécuter le traitement avant et après main