2010-01-18 6 views
0

je le code suivant comme un middleware dans une application Pylons:Pylônes Middleware personnalisée retour 404

import testing.model as model 
import re 
from pylons.controllers.util import abort 

class SubdomainCheckMiddleware(object): 
    def __init__(self, app): 
     self.app = app 

    def __call__(self, environ, start_response): 
     if 'subdomaincheck' in environ: 
      return self.app(environ, start_response) 

     p = re.compile('([a-z0-9\-]+)', re.IGNORECASE) 
     subdomain = p.match(environ['HTTP_HOST']).group(0) 
     query = "SELECT \"nspname\" FROM \"pg_namespace\" WHERE \"nspname\" = '%s';" % subdomain 
     result = model.meta.Session.execute(query) 
     for row in result: 
      if row['nspname'] == subdomain: 
       environ['subdomaincheck'] = 'done' 
       return self.app(environ, start_response) 

Ce qu'il fait basiquement est la vérification si un schéma dans postgresql est présent avec le sous-domaine donné, mais je besoin pour retourner 404 non trouvé si le schéma n'est pas présent, comment puis-je faire cela?

Répondre

1

Il est assez simple de retourner une 404 de base dans une application WSGI:

if error: 
    start_response("404 Not Found", [('Content-type', 'text/plain')]) 
    return ['Page not found'] 

Si vous voulez quelque chose de plus que vous développiez pouvez utiliser un autre middleware pour gérer les erreurs pour vous. Il semble vraiment que Pylons est livré avec un middleware StatusCodeRedirect qui pourrait vous aider si vous le vouliez.

+0

Fonctionne parfaitement, merci! –

Questions connexes