一千萬個為什麽

搜索

任何WSGI中間件使HTTP重定向特定的狀態代碼?

我正在使用Pylons並想要添加一些中間件,以便它捕獲 401狀態代碼並使 HTTP重定向(302)到登錄頁面。

我知道Pylons中有內置的StatusCodeRedirect以類似的方式運行,但它不會產生HTTP重定向,而是在內部重定向 (這是我不想要的)。

是否有任何現有的中間件要添加,或者是否可以輕松修改以在特定狀態代碼上進行HTTP重定向的任何通用中間件?

最佳答案

這應該讓你非常接近我沒有測試它,但它松散地基於我寫的東西,我正在使用所以必要的調整。

from webob.dec import wsgify


class Catch401AndRedirect(object):
    """
    responds to 401 redirects to signin page
    """

    def __init__(self, app, signin_url):
        self._app = app
        self._signin_url = signin_url

    @wsgify
    def __call__(self, request):

        response = request.get_response(self._app)

        if response.status_int == 401:
            response.headers["Location"] = self._signin_url
            response.status_int = 302
        else:
            return response

編輯:忘了提這個解決方案需要webob,但由於你已經使用了pylons,你有這種依賴。

轉載註明原文: 任何WSGI中間件使HTTP重定向特定的狀態代碼?