2017-03-06 43 views
0

我建立一個Django項目demonstration已在其憲法3個應用程序(應用程序,博客,前端) enter image description hereDjango的:我現在面臨阻止訪問特定用戶在一個應用程序

挑戰是以下內容:

我想限制訪問應用程序app只允許註冊用戶

換句話說,限制對app django應用程序中的所有頁面的訪問。

做一些研究後,迷迷糊糊翻過以下鏈接:

  1. Link 1
  2. Link 2
  3. Link 3

Link 1答案似乎實現更容易。

儘管如此,我還是遇到了一些問題,因爲我在Django中間件方面工作經驗不足。

問那裏的意見

「我想限制一個應用程序的訪問,被稱爲應用程序,如果用戶沒有登錄。中間件RequireLoginMiddleware類應該放在哪裏?

但到目前爲止還沒有答覆,我似乎沒有找到一種方法來解決這個問題。

任何人都可以解釋我需要做什麼限制訪問Django應用程序中的所有頁面,只允許註冊用戶

回答

1

如何解決:

裏面的views.py,從app app目錄, 增加了以下內容:

from django.contrib.auth.decorators import login_required 

而就在調用視圖前:

@login_required(login_url="/admin/") #location where users are going to be able to do the login 
def profile(request): #view 

這意味着:一旦用戶沒有登錄並試圖訪問的看法,他/她/它會被重定向到登錄屏幕

+0

不要硬編碼的URL(使用'反向( )'而不是)。另外,如果你不需要使用在你的設置中指定的參數(這通常是你想要的),那麼你不需要在每個和任何'login_required'調用中指定login_url。 –

+0

試圖執行'reverse'和'reverse_lazy'。 還沒有設法做到這一點,除非你解釋得更好,否則我沒有看到它的重要性。 關於另一方面,它的目的只是爲了說明如何做到這一點我們想要的任何網址 – brotherperes

1

你的中間件在哪裏取決於你,唯一重要的是它在你的sys.path

另請注意,Best way to make Django's login_required the default中的中間件依靠硬編碼的URL(至少在settings中硬編碼),這是DRY違規。這可以通過使用reverse_lazyapp應用的每個URL來解決,但在這一點上,你會更快只是裝飾你的app觀點與login_required

相關問題