Python 烧瓶在请求上下文之外工作。但我不知道';我想我不是
我可以使用pythonapi.py很好地运行该文件 但当我试着和服务员一起运行时,我得到了以下错误Python 烧瓶在请求上下文之外工作。但我不知道';我想我不是,python,python-2.7,flask,wsgi,waitress,Python,Python 2.7,Flask,Wsgi,Waitress,我可以使用pythonapi.py很好地运行该文件 但当我试着和服务员一起运行时,我得到了以下错误 import flask from flask import request from pacfiletesterAPI import PacFileTester from urlparse import urlparse from flask import jsonify app = flask.Flask(__name__) #app.config["DEBUG"] =
import flask
from flask import request
from pacfiletesterAPI import PacFileTester
from urlparse import urlparse
from flask import jsonify
app = flask.Flask(__name__)
#app.config["DEBUG"] = False
@app.route('/pac')
def pac():
r = request.args.get('p')
url = request.args.get('u')
domain = request.args.get('d')
Parsed_url = urlparse(url)
Parsed_domain = urlparse(domain)
if r == '':
return "'not enough arguments, please provide a vaild url"
elif url == '':
if domain == '':
return "'not enough arguments, please provide a vaild url"
elif domain == '':
if url == '':
return "'not enough arguments, please provide a vaild domain"
if Parsed_url.netloc == '':
domain = Parsed_url.path.rstrip('/')
else:
domain = Parsed_url.netloc
if not Parsed_url.scheme != 'http' or Parsed_url.scheme != 'https':
url = 'https://' + domain
result = PacFileTester(r, url, domain)
return jsonify(result)
#app.run(host= '0.0.0.0')
if __name__ == "__main__":
app.run(host= '0.0.0.0')
服务员服务——调用'api:pac'
回溯(最近一次呼叫最后一次):
文件“/usr/bin/waiterserve”,第11行,in
sys.exit(run())
文件“/usr/lib/python2.7/site packages/waiteress/runner.py”,第280行,运行中
app=app()
文件“/var/www/html/cloud_test3/api.py”,第13行,在pac中
r=request.args.get('p')
文件“/usr/lib/python2.7/site packages/werkzeug/local.py”,第347行,在__
返回getattr(self.\u get\u current\u object(),name)
文件“/usr/lib/python2.7/site packages/werkzeug/local.py”,第306行,在当前对象中
返回self.\uuu local()
文件“/usr/lib64/python2.7/site packages/flask/globals.py”,第38行,位于查找请求对象中
引发运行时错误(\u请求\u ctx\u错误\u消息)
运行时错误:在请求上下文之外工作。
这通常意味着您试图使用所需的功能
活动的HTTP请求。请参阅有关测试的文档
有关如何避免此问题的信息。
我的问题是,为什么我会犯这个错误。我不相信我是在请求上下文之外工作的。它似乎在dev服务器上按我所希望的方式工作,但在任何其他wsgi服务器上都不行。服务员是唯一一个给我这个错误的人。请参阅flask
文档
你需要告诉服务员你的应用程序,但它不像FLASK run那样使用FLASK_应用程序。您需要告诉it导入并调用应用程序工厂以获取应用程序对象
这意味着waiteress
服务器无法加载带有此参数的Flask
应用程序api:pac
服务器启动并运行后,您可以调用该端点,如:
$ waitress-serve --call 'myflaskapp:create_app'
最后,我建议您在开发Flask
应用程序时使用最佳实践
关于如何使用app-factory
模式设置Flask
应用程序,您可能知道python 2
从2020年1月开始就已经过时且不受支持,请使用python 3
并更新所有依赖项
http://localhost:8080/api/poc
我也有类似的问题,试着做类似的事情。当您由Waitess运行应用程序时,您只需调用一个名为“create_app”的函数,该函数包含您的所有flask应用程序。现在输入
服务员服务——呼叫:创建应用程序“
http://localhost:8080/api/poc
import flask
from flask import request
from pacfiletesterAPI import PacFileTester
from urlparse import urlparse
from flask import jsonify
def create_app():
app = flask.Flask(__name__)
@app.route('/pac')
def pac():
r = request.args.get('p')
url = request.args.get('u')
domain = request.args.get('d')
Parsed_url = urlparse(url)
Parsed_domain = urlparse(domain)
if r == '':
return "'not enough arguments, please provide a vaild url"
elif url == '':
if domain == '':
return "'not enough arguments, please provide a vaild url"
elif domain == '':
if url == '':
return "'not enough arguments, please provide a vaild domain"
if Parsed_url.netloc == '':
domain = Parsed_url.path.rstrip('/')
else:
domain = Parsed_url.netloc
if not Parsed_url.scheme != 'http' or Parsed_url.scheme != 'https':
url = 'https://' + domain
result = PacFileTester(r, url, domain)
return jsonify(result)
return app