0
투표 시스템을 구현하려고합니다. 이런 식으로 작동합니다. 사용자가 게시물에 투표하면 세션 변수에 임시 상태 (upvoted, starred 등)를 기록합니다.Flask가 스레드에서 세션 변수를 제거합니다.
현재 사용자가 투표하지 않은 경우 임시 테이블에 결과를 저장합니다. 사용자는 5 분 안에 투표를 변경할 수 있습니다. 5 분 경과 후 결과는 스레드를 사용하여 영구적으로 데이터베이스에 기록됩니다.
결과가 데이터베이스에 기록 된 후 임시 세션 변수를 지우고 싶습니다. 이것을 달성 할 수있는 방법이 있습니까?
task.py
import threading
import time
from flask import Flask, copy_current_request_context, session
from threading import Lock
from vote import voteQuestion
app = Flask(__name__)
app.secret_key="appkey"
@app.before_first_request
def initializeTask():
@copy_current_request_context
def runTask():
while True:
voteQuestion()
time.sleep(10)
task = threading.Thread(target=runTask)
task.start()
@app.route('/vote')
def vote():
session['test'] = "This is a test"
return 'success'
@app.route("/")
def hello():
return "Hello world!"
if __name__ == "__main__":
app.run()
vote.py
from flask import session
def voteQuestion():
print('session variables', session.items())
result = session.get('test', 'not set')
print ('result ', result)
if 'test' in session:
session.pop('test', None)
print ('Running in the background')
이미 임시 테이블에 타임 스탬프를 저장합니다. 하지만이 사용자는 ID 3이 게시물 5에 투표했다고 가정 해 봅시다. 투표 버튼의 색상이 오렌지색이됩니다. 게시물 7에 투표 한 후 5로 돌아옵니다. 현재 상황에서는 임시 투표 상태를 저장하기 위해 세션 변수를 사용합니다 : upvoted 등 – Erdem
왜 세션이 필요합니까? 이미 테이블에 있습니다. – davidism
임시 테이블에 이전 투표가 있기 때문에. 언뜻보기에 나는 마지막 투표 만 투표 테이블에 복사하고 임시 투표 상태를 저장하기 위해 세션 변수를 사용하는 것이 좋습니다. 현재 상황에서 내 템플릿 파일은 다음과 같습니다. - 세션이 설정된 경우이 데이터를 사용하고 데이터베이스를 사용합니다. 임시 투표 테이블 데이터를 사용하는 경우 5 분 후에 임시 투표에서 데이터를 가져올 지 아니면 템플릿의 투표 테이블에서 데이터를 가져올 지 결정해야합니다. – Erdem