2012-10-10 49 views
0

我的情況如下。Django註冊和其他視圖的內容

我有一個django應用程序,它是一個CMS,這個應用程序生成頁面內容和菜單。

存在生成所有頁面內容的'默認'視圖。其中一個主要的模型領域的設計限制根據設置網頁的知名度:

  • 「內部」(僅限於我們的網絡上的用戶),
  • 「全球」(可視範圍由WWW )現在,我想添加一個額外的值
  • '安全',這將限制只能看到登錄到該網站的人觀看。

我不認爲@login_required會工作,因爲它只對整個函數有效。

我們希望作者或編輯能夠設置此標誌,而不是編寫特殊功能;並且會出現頁面從「內部」遷移到「安全」然後再遷移到「全球」的情況 - 理想情況下,網址應該保持不變。

什麼是最好的方式去做這件事? 在此先感謝...帕特里克

回答

0

正如你想在你的對象上設置標誌,我假設標誌不能被讀取,直到你已經在視圖內(即你不會存儲它在請求對象可訪問的東西,如會話),這樣就排除了自定義裝飾器。你可以選擇去用的東西有點粗糙,但可行的是這樣的:

if (val=="internal" and inrange(request.META['REMOTE_ADDR'])) or (val=="secure" and request.user.is_authenticated()) or val=="worldwide": 
    return render_to_response .... etc. 
else: 
    return HttpResponseForbidden() 

代模型值,並寫入INRANGE功能,自然。

雖然更復雜的方法是編寫自定義中間件並使用process_view()函數。有關更多詳細信息,請參閱文檔。