Flask x Apscheduler - RuntimeError: RuntimeError: 在应用程序上下文之外工作

问题描述

尝试为我的 Flask 应用设置计划作业时出现以下错误

This typically means that you attempted to use functionality that needed
to interface with the current application object in some way. To solve
this,set up an application context with app.app_context().  See the
documentation for more information.

我尝试将函数“print_session”(这只是一个用于检查会话数据是否会通过的虚拟函数——实际上该函数查询数据库)包含一个“current_app.appcontext()”和“循环”,就像我一样已经在其他一些应用程序上看到过,但并不高兴。有谁知道为什么它仍然在应用程序上下文之外?

main.py

from website import create_app

app = create_app()

if __name__=="__main__":
    app.run(debug=True,host='localhost',port=5000,threaded=True)

init.py

from flask import Flask,session
from flask_sqlalchemy import sqlAlchemy 
from os import path
from flask_session import Session 
from flask_login import LoginManager
import redis

db = sqlAlchemy()
DB_NAME = 'sqlite:///db.sqlite3'
sess=Session()
login_manager = LoginManager()

def create_app():
    app = Flask(__name__)
    app.config['SECRET_KEY'] = "SECRET_KEY"
    app.config['sqlALCHEMY_DATABASE_URI'] = sqlALCHEMY_DATABASE_URI
    app.config['SESSION_TYPE'] = 'SESSION_TYPE'
    app.config['SESSION_REdis'] = 'SESSION_REdis'

    db.init_app(app)
    sess.init_app(app)
    login_manager.login_view = 'auth.login'
    login_manager.init_app(app)

    # with app.app_context():
    from .views import views
    from .auth import auth

    app.register_blueprint(views,url_prefix='/')
    app.register_blueprint(auth,url_prefix='/')

    from .models import User,Token
    create_database(app)
    return app

def create_database(app):
    db.create_all(app=app)
    print('Created database')

views.py

from flask import Blueprint,render_template,session,redirect,request,url_for
from flask import current_app
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.schedulers.blocking import BlockingScheduler
import datetime
from flask_login import login_required,current_user
from requests_oauthlib import OAuth2Session
from . import db
from .models import Token
from functools import wraps

def print_session(value):
    with current_app.app_context():
        print('Yes',value)
        return(redirect(url_for('views.home')))

@views.route('/start_schedule')
@login_required
def start_xero_schedule():
    with app.app_context():
        sched = BackgroundScheduler()                                        
        sched.add_job(print_session,'interval',args=[session['value']],seconds=10)
        sched.start()
    return(redirect(url_for('views.xero')))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...