我为了协作目的而运行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']
我会尝试解决它。
答案 0 :(得分:4)
查看source code of AuthenticatedMiddleware
。
它显示有一个名为AUTHENTICATED_EXEMPT_URLS
的设置。它可以包含公开的正则表达式。在settings.py
:
AUTHENTICATED_EXEMPT_URLS = (r"^api/",)
这将使/api/
以下的任何网址无法登录。