Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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

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_Wsgi_Waitress - Fatal编程技术网

Python 烧瓶在请求上下文之外工作。但我不知道';我想我不是

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"] =

我可以使用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"] = 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