Pylons Custom Middleware返回404

时间:2010-01-18 10:35:17

标签: python pylons wsgi paster

我将以下代码作为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中的模式是否与给定的子域一起存在,但如果模式不存在,我需要它返回404,如何找到该模式?

1 个答案:

答案 0 :(得分:1)

在WSGI应用程序中返回基本404非常简单:

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

如果您想要更精细的内容,可以使用其他一些中间件来为您处理错误。实际上看起来Pylons附带了StatusCodeRedirect中间件,如果你需要它可以帮助你。