Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我得到了一个“答案”;运行时错误:在请求上下文之外工作。”;当我实现您的登录时_Python_Python 2.7_Flask_Flask Login - Fatal编程技术网

Python 我得到了一个“答案”;运行时错误:在请求上下文之外工作。”;当我实现您的登录时

Python 我得到了一个“答案”;运行时错误:在请求上下文之外工作。”;当我实现您的登录时,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(

我正在尝试创建一个在google应用程序引擎上运行的web应用程序。我正在尝试使用Flask登录实现身份验证。 当我运行应用程序时,我会得到如下所述的错误消息

我已经安装了Flask Login和所有其他库

如图所示,我的所有第三方库都位于项目文件夹中。

如果您需要更多信息,请告诉我

请帮帮我。这让我快发疯了

MyServices.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
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,它将显示导入烧瓶的未找到错误。如果代码正常,则可以忽略错误

如果你有更多问题,请告诉我