2014-06-09 1 views
0

static 폴더의 Pickle 파일에서 가져온 데이터가있는 html 테이블을 채우는 플라스크 앱이 있습니다. Pickle 파일을 1 분 간격으로 업데이트하는 외부 응용 프로그램이 있습니다.플라스크 웹 앱의 데이터가 업데이트되지 않습니다. [Python]

views.py 파일은 Pickle 파일을 열고 데이터를로드 한 다음 html 템플릿으로 보냅니다.

페이지를 새로 고침 한 횟수와 상관없이 데이터가 처음 터미널에서 앱을 시작했을 때와 동일하지만 앱이 실행 중입니다.

screen 인스턴스에서 uwsgi --socket 127.0.0.1:3031 --wsgi-file run_web.py --callable app --processes 4 --threads 2 --stats 127.0.0.1:9191을 통해 시작합니다.

데이터를 올바르게 새로 고치려면 어떻게해야합니까?

내가 요청은 플라스크 서버에 도달 않았다 ... 플라스 크 응용 프로그램

views.py 모두의

import all the things  

with open('/home/metheuser/webapps/ers_portal/app/static/' + ec.dd_filename) as f: 
    data = pickle.load(f) 

column_names = data.pop('__column_names__') 
column_names.insert(2, 'Screen Viewer') 
column_names.insert(3, 'Site Page') 
sites = data.keys() 

for sitename in data: 
    data[sitename].insert(2, ec.unit_roster[sitename]['ip_address']) 
    data[sitename].insert(3, 'doesn\'tgoanywhereyet...') 

dbt = da.Database_Authenticator(admin=False) 

#************************************************ 
lm = LoginManager() 
lm.init_app(app) 
lm.login_view = 'login' 

def authenticate(un, typed_pw, remember=False): 
    """login with database""" 
    my_user = dbt.authenticate_user(un, typed_pw) 
    if my_user: # user is authenticated 
     return my_user 
    else: 
     return False 

@lm.user_loader 
def load_user(userid): 
    print 'user id:',userid 
    try: 
     return dbt.get_user_by_id(userid) 
    except AttributeError: 
     return None 

@app.before_request 
def before_request(): 
    g.user = current_user 

@app.route('/') 
@app.route('/index') 
def index(): 
    return render_template("index.html", 
          title = 'Main',) 

@app.route('/login', methods = ['GET', 'POST']) 
def login(): 
    if g.user is not None: 
     if g.user.is_authenticated(): 
      return redirect(request.args.get('next') or 'index') 
    form = LoginForm() 
    if form.validate_on_submit(): 
     authed_user = authenticate(form.username.data, form.typed_pw.data, form.remember_me.data) 
     if authed_user: 
      authed_user.authenticated = True 
      u = login_user(authed_user, form.remember_me.data) 
     return redirect(request.args.get('next') or 'index') 
    return render_template('login.html', 
     title = 'Sign In', 
     form = form) 

@app.route('/logout') 
def logout(): 
    logout_user() 
    return redirect('index') 

@app.route('/my_table') 
@login_required 
def my_table(): 
    print 'trying to access data table...' 
    return render_template("my_table.html", 
          title = "Rundata Viewer", 
          sts = sites, 
          cn = column_names, 
          data = data) # dictionary of data 
+0

내 생각 엔하지만'views.py' 파일을 보지 않고 서버가 아니라 각 요청시보다 시작할 때 당신은'Pickle' 파일을로드 할 것입니다 확실하게 알기가 어렵습니다. – dirn

+0

@dirn : 죄송합니다. 뷰 파일이 매우 중요하다고 생각합니다. 위에 포함되어 있습니다 –

+0

아래의 @ Daniel의 대답을 참조하십시오. 프로세스가 시작될 때 파일을로드하지만 요청이있을 때마다로드하려고합니다. – dirn

답변

1

먼저 호스트 uswginginx을 사용하고? 그렇다면 우리는 귀하의 views.py를 보여 주어야합니다. 그렇지 않다면, 일부 쿼리 문자열을 추가하여 새로 고침을 시도하십시오 : http://your/url.html?123.

편집 : view.py 안에는 서버가 시작될 때 data 만로드됩니다. 당신은 데이터마다 파일 변경 사항을 업데이트 할 수 있습니다

data_modification_time = None 
data = None 
def reload_data(): 
    global data_modification_time, data 
    filename = '/home/metheuser/webapps/ers_portal/app/static/' + ec.dd_filename 
    mtime = os.stat(filename).st_mtime 
    if data_modification_time != mtime: 
     data_modification_time = mtime 
     with open(filename) as f: 
      data = pickle.load(f) 
    return data 
+0

요청이 서버에 도달하고 있다고 생각합니다. uwsgi 서버를 시작할 때 다른 컴퓨터에서 페이지에 액세스 할 수 있고 데이터가 최신 상태라면 대답이 '예'입니까? 위의 views.py 파일을 포함 시켰습니다. –

+0

요청마다 데이터를 방금 다시로드하면 문제가 발생합니까? 아니면 누군가가 페이지를 열 때마다 데이터 파일이 열리는 것입니까? 나는 당신의 기능이 시간과 관련하여 무엇을 찾고 있는지에 대해 약간 혼란 스럽다. –