2014-10-17 43 views
1

在我的項目中,我們需要某種類型的系統來允許/拒絕對URL的某些訪問。Django - 如何拒絕直接訪問記錄的用戶到特定的URL

例如,我們想製作某種嚮導。

用戶在第一個屏幕(A屏幕)上輸入第一個對象,然後按「繼續」。 現在我們得到數據並重定向到第二個屏幕(B屏幕),在那裏我們用戶應該輸入第二個對象。 嚮導繼續... 問題是,如果我們這樣做,用戶可以在瀏覽器中寫入B url並訪問B屏幕。用戶已經登錄了,但即便如此,我們也不希望他不通過屏幕即可到達那裏。

我們不知道如何做到這一點或在互聯網上尋找這個。我們只知道用戶會話這樣做。

還有別的辦法嗎?一些幫助?

在此先感謝。

+2

這有什麼不好使用會話? – 2014-10-17 17:18:53

+1

你看過[django的表單嚮導](https://docs.djangoproject.com/en/dev/ref/contrib/formtools/form-wizard/)嗎? – dgel 2014-10-17 17:25:47

回答

1

我認爲外鍵是你尋找的解決方案'A'作爲'B'的外鍵,'B'的URL傳遞'A'的id作爲這樣的參數url(r'^A/(?P<A_id>[0-9]+) this方式第一用戶將輸入數據在'A'它將被存儲在數據庫中,然後訪問'B'將通過ID'A'可用。閱讀更多關於外鍵here

1

目前,我正在從事數學家庭作業項目。有三種類型的用戶。教授,學生和管理員。以下片段將拒絕用戶根據用戶的類型訪問網址。修改後,您必須將此方法裝飾器添加到服務於http請求的請求方法中。

def deny_a_thing(function): 
    def wrapper(request, *args, **kw): 
     try: 
      test = User.objects.get(username=request.user) # This will get the username 
     except ObjectDoesNotExist: 
      raise Http404         # return 404, if the user doesn't exist. You can change it to anything 
     if not request.user.is_authenticated():    # If the user is not authenticated, return to the rootm. You can also change this. 
      return HttpResponseRedirect("/") 
     try: 
      if test.groups.filter()[0].name != "professors": # Add your test here. E.g: If user saved A, don't go B. 
       raise Http404 
     except IndexError: 
      raise Http404 
     else: 
      return function(request, *args, **kw) 
    return wrapper 

以下內容添加到您的方法

@deny_a_thing     # This will deny the user from doing the thing you didn't want the user to do. 
def some_page_request(request): 
    return HttpResponse("OMG") 

檢查這個link一個簡單的裝飾