2016-05-31 3 views
2

私はDjangoで新しく、他のファイルからvaribleにアクセスしようとしています。しかし、私は彼の価値を得ることはできません。私はDJangoの認証システムを使用せず、私はIDPにログインし、IDPはtokenId、uidといくつかのデータを返送します。Pythonでインポートされたvar/Djangoが空です

......... 
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.pyオン

空ですが、fileAのtokenIdには値が割り当てられており、ログアウトや作業に使用できます。

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

とFILEBに私は:

私はFILEAにチェックを実行しようとしました

...それが値を持たない他のファイルからのTokenIdを呼び出すときに、なぜだから私は理解していません

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') 
関連する問題