2010-01-21 270 views
3

我爲了協作目的運行Pinax站點。我將'account.middleware.AuthenticatedMiddleware'添加到'MIDDLEWARE_CLASSES',以便不允許匿名訪問網站上的任何內容。如何將公共API添加到類似Intranet的網站?

但現在我需要啓用公共API。除了在所有仍然需要隱私的視圖中添加「login_required」 - 裝飾器之外,是否還有其他解決方案?

編輯 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'] 

我會嘗試修復它。

回答

4

看看source code of AuthenticatedMiddleware

它揭示了一個叫做AUTHENTICATED_EXEMPT_URLS的設置。它可以包含保持公開的正則表達式。將它設置爲這樣的事情在你的settings.py

AUTHENTICATED_EXEMPT_URLS = (r"^api/",) 

這將使下面/api/任何可用的網址不被記錄in.t

+0

請看到我的編輯 – vikingosegundo 2010-01-21 20:55:24

+0

你上述的'AUTHENTICATED_EXEMPT_URLS'的網址定義在「intranet_project」的默認設置中(請參閱此:http://github.com/pinax/pinax/blob/ddfd4b8cac714ffc30c73604e5399860210054f0/pinax/projects/intranet_project/settings.py#L199)。你可以附加你的網址(比如'r'api /'')。 *(提示:我經常搜索我的項目的整個代碼庫,通過'grep -r'或類似的東西找到這樣的重新定義,這在大多數情況下都有幫助)* – 2010-01-22 10:50:05

+0

我不認爲覆蓋默認藍圖是有用的,因爲它會破壞更新循環。相反,我在'/apps/account/middleware.py'中更改了'豁免項' – vikingosegundo 2010-01-22 18:59:38