2017-09-03 1 views
0

전역 변수를 설정하고 다양한 함수의 트리거로 사용하고 싶습니다. 각 사용자는 별도의 전역 변수를가집니다. 이전 메시지 데이터를 추적하고 대화를 진행하는 데 사용됩니다. 문제는 각 사용자에게 별도의 전역 변수를 어떻게 관리 할 수 ​​있습니까? 앱을 서버에 배포하면 앱이 실행 중입니다. 전역 변수를 변경하려고 시도하면이 변수는 변경을 트리거 한 단일 사용자뿐만 아니라 모든 사용자에게 적용됩니다.python flask에서 전역 변수를 설정하는 방법은 무엇입니까?

DB가없는 파이썬 플라스크를 사용하고 있습니다.

감사합니다.

+0

"전역"과 "사용자"는 완전히 다른 두 가지입니다. –

+0

검색해야하는 키워드는 "세션"입니다. –

답변

0

당신은 이것에 대한 전역 변수를 필요로하지 않으며, 진정으로 글로벌 변수를 사용하는 것은 나쁜 습관이므로 앞으로는 언제든지 필요 없을 것입니다. 자세한 내용은이 링크를 참조하십시오. why are global variables evil?

이제 문제가 발생하면 g 동일한 사용자의 여러 요청에서 지속되는 컨텍스트를 만드는 플라스크 모듈이 필요합니다.

from flask import g 

... 

def get_messages(): 
    messages = getattr(g, '_messages', None) 
    if messages is None: 
     g._messages = [] # to store messages you may use a dictionary 

    return g._messages 

def add_message(message): 
    messages = get_messages() 
    messages.append(message) 
    setattr(g, '_messages', messages) 
    return messages 

각 사용자에 대해 변수가 공유되지도 않고 해당 값이 아닌 다른 스레드가 만들어 졌음을 기억하십시오. 따라서 각 사용자마다 다른 g이 있지만 동일한 사용자의 여러 요청에 대해 지속됩니다. 희망이 도움이됩니다!

+0

감사합니다. 이것은 내 문제를 완벽하게 해결했다. –

+0

당신을 진심으로 환영합니다! –

1

질문을 올바르게 이해하고 있는지는 잘 모르겠지만 사용자 이름과 값으로 키를 메시지로 사용하는 글로벌 사전을 만들 수 있습니다.

그래서 때마다 당신이 사용자 이름 (사전의 키)에 따라 각각의 변수에 액세스 할 수있는 사전에 변수를 업데이트 할

userMsg = {"John":"hello"} #existing user 
# update John's msg 
userMsg["John"] = "bye" 
# now userMsg is {"John":"bye"} 

# add new user if user does not exist 
userMsg["Mary"] = "Your Message Here" 
# now userMsg is {"John":"bye", "Mary":"Your Message Here"} 
+0

답변 해 주셔서 감사합니다. –

관련 문제