2017-01-22 2 views
1

J'ai une application de base en utilisant Pyramid 1.8 où je veux avoir un forbidden_view_config pour défier le client.Pyramid 1.8 forbidden_view_config return 404

Dans mon views.py je:

from pyramid.view import view_config 
from pyramid.view import forbidden_view_config 
from pyramid.httpexceptions import HTTPUnauthorized 
from pyramid.security import forget 

@view_config(route_name='home', renderer='templates/mytemplate.jinja2') 
def my_view(request): 
    return {'project': 'odkchallenge'} 


@forbidden_view_config(route_name='carlos') 
def auth_view(request): 
    response = HTTPUnauthorized() 
    response.headers.update(forget(request)) 
    return response 

Dans mon init.py je:

from pyramid.config import Configurator 


def main(global_config, **settings): 
    """ This function returns a Pyramid WSGI application. 
    """ 
    config = Configurator(settings=settings) 
    config.include('pyramid_jinja2') 
    config.add_static_view('static', 'static', cache_max_age=3600) 
    config.add_route('home', '/') 
    config.add_route('carlos', '/carlos') 
    config.scan() 
    return config.make_wsgi_app() 

Mais quand je vais à http://localhost:6543/carlos je reçois:

404 Non trouvé La ressource n'a pas pu être trouvée.

/carlos

Je cherchais à la documentation sur forbidden_view_config et il devrait être comme view_config. Si je le change en view_config/carlos ne retourne pas 404. Une idée pourquoi? ou quoi d'autre je dois inclure?

Répondre

1

Dans votre exemple collé, vous utilisez forbidden_view_config sans aucune vue contenant des autorisations et donc il n'est pas déclenché. Si, au lieu de cela, vous avez utilisé notfound_view_config, vous devez au moins exécuter votre vue auth_view.

+0

Pouvez-vous expliquer un peu plus loin? Comment ajouter des autorisations à une vue? ou pouvez-vous me diriger vers quelque part? – QLands

+0

La vue interdite est exécutée lorsqu'une exception 'HTTPForbidden' est levée dans votre application, que vous pouvez faire manuellement ou que vous pouvez utiliser le système d'authentification pyramid pour que les exceptions soient levées automatiquement en fonction des autorisations de vue' @view_config (permission = ..) '. Le tutorial de répartition de sqlalchemy + url de Pyramid va dans ce sens et vaut la peine d'être lu si vous ne l'avez pas encore fait. –