Pylons自定义中间件返回404

0 投票
1 回答
889 浏览
提问于 2025-04-15 18:09

我在一个pylons应用程序中有以下代码作为中间件:

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数据库中是否存在与给定子域名对应的模式(schema)。不过,我需要它在模式不存在时返回404未找到的错误,我该怎么做呢?

1 个回答

2

在WSGI应用中,返回一个基本的404错误其实很简单:

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

如果你想要更复杂一点的处理方式,可以使用其他的中间件来帮你处理错误。实际上,Pylons自带了一个叫做StatusCodeRedirect的中间件,如果你需要的话,它可能会对你有帮助。

撰写回答