2016-05-31 20 views
2

我是新的Django,我試圖從其他文件訪問變量。但我不明白他的價值。我不使用DJango身份驗證系統,我登錄到IDP,IDP發回tokenId,uid以及更多數據。python/Django導入的變量是空的

在fileA.py我:

......... 
tokenId = '' 
......... 
def validateToken(tokenId): 
     ............... 
     returns True or False 

def login(request): 
    ............. 
    global tokenId 
    tokenId = value/returned/from/server 
    return HttpResponseRedirect('/loggedin') 

,並在用戶它的重定向,代碼去fileB.py:

from fileA import validateToken, tokenId 
......... 
def menu(request): 
    if validateToken(tokenId): 
     return render_to_response('menu/menu.html') 
    else: 
     return render_to_response('menu/access_error.html') 

如果我做調試我發現,tokenId它的空...但在fileA tokenId有他的值分配,我可以用它來做註銷和工作。所以,我不明白爲什麼當我打電話tokenId從其他文件它沒有價值......

我試圖做的fileA檢查:

def validateToken(): #I don't pass the var because it's global on fileA 
    ......... 
    returns True or False 

而且在FILEB我做的:

from fileA import validateToken 
......... 
def menu(request): 
    if validateToken(): 
     return render_to_response('menu/menu.html') 
    else: 
     return render_to_response('menu/access_error.html') 

但它給出了一個錯誤:[NameError] name'tokenId'它沒有被定義。

但它的定義! :/

我在做什麼錯了?感謝致敬。

+0

即使你能得到這個工作,你**不得**。所有請求都共享模塊級別的任何變量,因此您的'token_id'對其他用戶可見。不要這樣做。 –

+0

那麼,我該如何檢查它的有效標記(用戶確實登錄)並顯示受保護的內容? – Aker666

+0

如果您需要跨請求保留所有內容,則需要將它們存儲在某個地方;大概這裏最好的地方就是會議。 –

回答

0

感謝Daniel Roseman給我的使用會話暗示。我已經解決了我的問題。

上的fileA我說:

def login(request): 
    ........... 
    global tokenId <-------- deteled 
    tokenId = value/returned/from/server 
    request.session['tokenId'] = tokenId <-------- added 
    return HttpResponseRedirect('/loggedin') 

而現在,在FILEB我把驗證功能:

def validateToken(request): 
    ................... 
    request.session.get('tokenId') <---- when I need get the value 

def menu(request): 
    if validateToken(request): 
     return render(request, 'menu/menu.html') 
    else: 
     return render_to_response('menu/access_error.html')