微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。