Python 我得到了一个“答案”;运行时错误:在请求上下文之外工作。”;当我实现您的登录时
我正在尝试创建一个在google应用程序引擎上运行的web应用程序。我正在尝试使用Flask登录实现身份验证。 当我运行应用程序时,我会得到如下所述的错误消息 我已经安装了Flask Login和所有其他库 如图所示,我的所有第三方库都位于项目文件夹中。 如果您需要更多信息,请告诉我 请帮帮我。这让我快发疯了 MyServices.pyPython 我得到了一个“答案”;运行时错误:在请求上下文之外工作。”;当我实现您的登录时,python,python-2.7,flask,flask-login,Python,Python 2.7,Flask,Flask Login,我正在尝试创建一个在google应用程序引擎上运行的web应用程序。我正在尝试使用Flask登录实现身份验证。 当我运行应用程序时,我会得到如下所述的错误消息 我已经安装了Flask Login和所有其他库 如图所示,我的所有第三方库都位于项目文件夹中。 如果您需要更多信息,请告诉我 请帮帮我。这让我快发疯了 MyServices.py import os, sys on_appengine = os.environ.get('SERVER_SOFTWARE','').startswith(
import os, sys
on_appengine = os.environ.get('SERVER_SOFTWARE','').startswith('Development')
if on_appengine and os.name == 'nt':
sys.platform = "Not Windows"
sys.path.insert(1, os.path.join(os.path.abspath('.'), 'lib'))
from lib.flask import Flask
from lib.flask_login import LoginManager
app = Flask(__name__)
app.config.from_pyfile('app.config')
login_manager = LoginManager()
login_manager.init_app(app)
import MyApp
MyApp.register_blueprints(app)
from app.controllers.auth import auth_bp
from app.controllers.home import home_bp
def register_blueprints(app):
app.register_blueprint(home_bp)
app.register_blueprint(auth_bp)
from lib.flask import render_template, Blueprint
home_bp = Blueprint("home", __name__, template_folder='../templates')
@home_bp.route('/')
def Get():
return render_template('home/home.html')
from app.Repository.UserInfoRepository import UserInfoRepository
from lib.flask import render_template, Blueprint, session, request, make_response, redirect, flash
from lib.flask_login import current_user, login_required, login_user, logout_user, confirm_login, fresh_login_required
from MyServices import login_manager
auth_bp = Blueprint("auth", __name__, template_folder='../templates')
@auth_bp.route('/login', methods=['POST'])
def login():
userInfoRepository = UserInfoRepository()
user = userInfoRepository.AuthenticateUser(request)
if user is not None and user.is_authenticated:
if login_user(user, remember=True):
flash("Logged in!")
return render_template('home/home.html', name=current_user)
else:
flash("unable to log you in")
return render_template('home/home.html')
def IsLoggedIn():
if not session.has_key('uid'):
return False
return session['ip'] == request.remote_addr
@auth_bp.route('/logout')
@login_required
def logout():
logout_user()
return render_template('home/home.html')
@login_manager.unauthorized_handler
def unauthorized_callback():
return redirect('/')
@login_manager.user_loader
def load_user(id):
if id is None:
redirect('/')
userInfoRepository = UserInfoRepository()
user = userInfoRepository.GetUserByID(id)
if user.is_active():
return user
else:
return None
MyApp.py
import os, sys
on_appengine = os.environ.get('SERVER_SOFTWARE','').startswith('Development')
if on_appengine and os.name == 'nt':
sys.platform = "Not Windows"
sys.path.insert(1, os.path.join(os.path.abspath('.'), 'lib'))
from lib.flask import Flask
from lib.flask_login import LoginManager
app = Flask(__name__)
app.config.from_pyfile('app.config')
login_manager = LoginManager()
login_manager.init_app(app)
import MyApp
MyApp.register_blueprints(app)
from app.controllers.auth import auth_bp
from app.controllers.home import home_bp
def register_blueprints(app):
app.register_blueprint(home_bp)
app.register_blueprint(auth_bp)
from lib.flask import render_template, Blueprint
home_bp = Blueprint("home", __name__, template_folder='../templates')
@home_bp.route('/')
def Get():
return render_template('home/home.html')
from app.Repository.UserInfoRepository import UserInfoRepository
from lib.flask import render_template, Blueprint, session, request, make_response, redirect, flash
from lib.flask_login import current_user, login_required, login_user, logout_user, confirm_login, fresh_login_required
from MyServices import login_manager
auth_bp = Blueprint("auth", __name__, template_folder='../templates')
@auth_bp.route('/login', methods=['POST'])
def login():
userInfoRepository = UserInfoRepository()
user = userInfoRepository.AuthenticateUser(request)
if user is not None and user.is_authenticated:
if login_user(user, remember=True):
flash("Logged in!")
return render_template('home/home.html', name=current_user)
else:
flash("unable to log you in")
return render_template('home/home.html')
def IsLoggedIn():
if not session.has_key('uid'):
return False
return session['ip'] == request.remote_addr
@auth_bp.route('/logout')
@login_required
def logout():
logout_user()
return render_template('home/home.html')
@login_manager.unauthorized_handler
def unauthorized_callback():
return redirect('/')
@login_manager.user_loader
def load_user(id):
if id is None:
redirect('/')
userInfoRepository = UserInfoRepository()
user = userInfoRepository.GetUserByID(id)
if user.is_active():
return user
else:
return None
home.py
import os, sys
on_appengine = os.environ.get('SERVER_SOFTWARE','').startswith('Development')
if on_appengine and os.name == 'nt':
sys.platform = "Not Windows"
sys.path.insert(1, os.path.join(os.path.abspath('.'), 'lib'))
from lib.flask import Flask
from lib.flask_login import LoginManager
app = Flask(__name__)
app.config.from_pyfile('app.config')
login_manager = LoginManager()
login_manager.init_app(app)
import MyApp
MyApp.register_blueprints(app)
from app.controllers.auth import auth_bp
from app.controllers.home import home_bp
def register_blueprints(app):
app.register_blueprint(home_bp)
app.register_blueprint(auth_bp)
from lib.flask import render_template, Blueprint
home_bp = Blueprint("home", __name__, template_folder='../templates')
@home_bp.route('/')
def Get():
return render_template('home/home.html')
from app.Repository.UserInfoRepository import UserInfoRepository
from lib.flask import render_template, Blueprint, session, request, make_response, redirect, flash
from lib.flask_login import current_user, login_required, login_user, logout_user, confirm_login, fresh_login_required
from MyServices import login_manager
auth_bp = Blueprint("auth", __name__, template_folder='../templates')
@auth_bp.route('/login', methods=['POST'])
def login():
userInfoRepository = UserInfoRepository()
user = userInfoRepository.AuthenticateUser(request)
if user is not None and user.is_authenticated:
if login_user(user, remember=True):
flash("Logged in!")
return render_template('home/home.html', name=current_user)
else:
flash("unable to log you in")
return render_template('home/home.html')
def IsLoggedIn():
if not session.has_key('uid'):
return False
return session['ip'] == request.remote_addr
@auth_bp.route('/logout')
@login_required
def logout():
logout_user()
return render_template('home/home.html')
@login_manager.unauthorized_handler
def unauthorized_callback():
return redirect('/')
@login_manager.user_loader
def load_user(id):
if id is None:
redirect('/')
userInfoRepository = UserInfoRepository()
user = userInfoRepository.GetUserByID(id)
if user.is_active():
return user
else:
return None
auth.py
import os, sys
on_appengine = os.environ.get('SERVER_SOFTWARE','').startswith('Development')
if on_appengine and os.name == 'nt':
sys.platform = "Not Windows"
sys.path.insert(1, os.path.join(os.path.abspath('.'), 'lib'))
from lib.flask import Flask
from lib.flask_login import LoginManager
app = Flask(__name__)
app.config.from_pyfile('app.config')
login_manager = LoginManager()
login_manager.init_app(app)
import MyApp
MyApp.register_blueprints(app)
from app.controllers.auth import auth_bp
from app.controllers.home import home_bp
def register_blueprints(app):
app.register_blueprint(home_bp)
app.register_blueprint(auth_bp)
from lib.flask import render_template, Blueprint
home_bp = Blueprint("home", __name__, template_folder='../templates')
@home_bp.route('/')
def Get():
return render_template('home/home.html')
from app.Repository.UserInfoRepository import UserInfoRepository
from lib.flask import render_template, Blueprint, session, request, make_response, redirect, flash
from lib.flask_login import current_user, login_required, login_user, logout_user, confirm_login, fresh_login_required
from MyServices import login_manager
auth_bp = Blueprint("auth", __name__, template_folder='../templates')
@auth_bp.route('/login', methods=['POST'])
def login():
userInfoRepository = UserInfoRepository()
user = userInfoRepository.AuthenticateUser(request)
if user is not None and user.is_authenticated:
if login_user(user, remember=True):
flash("Logged in!")
return render_template('home/home.html', name=current_user)
else:
flash("unable to log you in")
return render_template('home/home.html')
def IsLoggedIn():
if not session.has_key('uid'):
return False
return session['ip'] == request.remote_addr
@auth_bp.route('/logout')
@login_required
def logout():
logout_user()
return render_template('home/home.html')
@login_manager.unauthorized_handler
def unauthorized_callback():
return redirect('/')
@login_manager.user_loader
def load_user(id):
if id is None:
redirect('/')
userInfoRepository = UserInfoRepository()
user = userInfoRepository.GetUserByID(id)
if user.is_active():
return user
else:
return None
错误消息
[2017-09-15 21:11:47,875] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "D:\PyCharmProjects\myservices\lib\flask\app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "D:\PyCharmProjects\myservices\lib\flask\app.py", line 1615, in full_dispatch_request
return self.finalize_request(rv)
File "D:\PyCharmProjects\myservices\lib\flask\app.py", line 1632, in finalize_request
response = self.process_response(response)
File "D:\PyCharmProjects\myservices\lib\flask\app.py", line 1856, in process_response
response = handler(response)
File "D:\PyCharmProjects\myservices\lib\flask_login\login_manager.py", line 380, in _update_remember_cookie
if 'remember' in session:
File "D:\PyCharmProjects\myservices\lib\werkzeug\local.py", line 379, in <lambda>
__contains__ = lambda x, i: i in x._get_current_object()
File "D:\PyCharmProjects\myservices\lib\werkzeug\local.py", line 306, in _get_current_object
return self.__local()
File "D:\PyCharmProjects\myservices\lib\flask\globals.py", line 37, in _lookup_req_object
raise RuntimeError(_request_ctx_err_msg)
RuntimeError: Working outside of request context.
[2017-09-15 21:11:47875]应用程序中出现错误:/[GET]上出现异常
回溯(最近一次呼叫最后一次):
文件“D:\PyCharmProjects\myservices\lib\flask\app.py”,行1982,在wsgi_应用程序中
response=self.full\u dispatch\u request()
文件“D:\PyCharmProjects\myservices\lib\flask\app.py”,第1615行,完整调度请求
返回自我确认请求(rv)
文件“D:\PyCharmProjects\myservices\lib\flask\app.py”,第1632行,在finalize\u请求中
响应=自我过程\响应(响应)
文件“D:\PyCharmProjects\myservices\lib\flask\app.py”,第1856行,进程响应中
响应=处理程序(响应)
文件“D:\PyCharmProjects\myservices\lib\flask\u login\login\u manager.py”,第380行,在\u update\u memory\u cookie中
如果在会话中“记住”:
文件“D:\PyCharmProjects\myservices\lib\werkzeug\local.py”,第379行,在
__包含λx,i:i在x中。\u获取\u当前\u对象()
文件“D:\PyCharmProjects\myservices\lib\werkzeug\local.py”,第306行,在\u get\u current\u对象中
返回self.\uuu local()
文件“D:\PyCharmProjects\myservices\lib\flask\globals.py”,第37行,位于\u lookup\u req\u对象中
引发运行时错误(\u请求\u ctx\u错误\u消息)
运行时错误:在请求上下文之外工作。
最后,我终于找到了问题所在。问题在于我如何处理lib文件夹中的第三方包
我通过添加_init__.py将lib文件夹添加到一个包中。我打电话给lib.flask导入flask。但是,flask登录模块导入flask而不是lib.flask。这就是为什么当flask登录的模块调用会话变量时,它们从flask模块而不是lib.flask中获取该变量。因此,这是断章取义的。
解决方案是从lib文件夹中删除_uinit__uuu.py。在搜索中添加lib文件夹,我已经通过添加sys.path.insert(1,os.path.join(os.path.abspath('.'),'lib'))完成了这项工作。
如果您正在使用PyCharm,它将显示导入烧瓶的未找到错误。如果代码正常,则可以忽略错误
如果你有更多问题,请告诉我