如何将公共API添加到类似Intranet的站点?

时间:2010-01-21 17:04:30

标签: django pinax

我为了协作目的而运行Pinax网站。我将'account.middleware.AuthenticatedMiddleware'添加到'MIDDLEWARE_CLASSES',以便不允许匿名访问网站上的任何内容。

但现在我需要启用公共API。除了在所有仍然需要私密的视图中添加'login_required'-decorator之外,还有其他解决方案吗?

修改 GregorMüllegger的回答不起作用。 settings.AUTHENTICATED_EXEMPT_URLS似乎在代码中的某处被覆盖了

class AuthenticatedMiddleware(object):
    def __init__(self, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
        if login_url is None:
            login_url = settings.LOGIN_URL
        self.redirect_field_name = redirect_field_name
        self.login_url = login_url
        self.exemptions = [
            r"^%s" % settings.MEDIA_URL,
            r"^%s" % settings.STATIC_URL,
            r"^%s$" % login_url,
        ] 
        print "settings.AUTHENTICATED_EXEMPT_URLS ",settings.AUTHENTICATED_EXEMPT_URLS
        if ( settings.AUTHENTICATED_EXEMPT_URLS):
            self.exemptions += settings.AUTHENTICATED_EXEMPT_URLS


print "settings.AUTHENTICATED_EXEMPT_URLS ",settings.AUTHENTICATED_EXEMPT_URLS

不打印我的设置,但是:

settings.AUTHENTICATED_EXEMPT_URLS  ['^/account/signup/$', '^/account/password_reset', '^/account/confirm_email', '^/openid']

我会尝试解决它。​​

1 个答案:

答案 0 :(得分:4)

查看source code of AuthenticatedMiddleware

它显示有一个名为AUTHENTICATED_EXEMPT_URLS的设置。它可以包含公开的正则表达式。在settings.py

中将其设置为类似的内容
AUTHENTICATED_EXEMPT_URLS = (r"^api/",)

这将使/api/以下的任何网址无法登录。