Pylons Custom Middleware возврат 404 - PullRequest
0 голосов
/ 18 января 2010

У меня следующий код в качестве промежуточного программного обеспечения в приложении пилонов:

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)

Что он делает в основном, проверяет, присутствует ли схема в postgresql с данным поддоменом, но мне нужно, чтобы она возвращала 404, не найденную, если схемы нет, как я могу это сделать?

1 Ответ

1 голос
/ 18 января 2010

Довольно просто вернуть базовый 404 в приложении WSGI:

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

Если вы хотите что-то более сложное, вы можете использовать другое промежуточное программное обеспечение для обработки ошибок за вас. На самом деле, похоже, что Pylons поставляется с StatusCodeRedirect промежуточным программным обеспечением, которое может помочь вам здесь, если вы этого хотите.

...