首页 > 解决方案 > “烧瓶实例”没有属性“记录”错误

问题描述

我有一个项目,我正在尝试使用具有以下结构的 flask 和 python 构建一个 api:

graph:
    -app.py
    -server.py
    -apis:
        -__init__.py
        -users.py
        -transaction_functions.py
        -neo4j_ops.py

server.py文件中,我试图将身份验证添加到users.py文件中编码的 api 端点。我的server.py文件如下所示:

import json
from six.moves.urllib.request import urlopen
from functools import wraps

from flask import Flask, request, jsonify, _request_ctx_stack
from flask_cors import cross_origin
from jose import jwt



AUTH0_DOMAIN = 'mydomain.eu'
API_AUDIENCE = 'https://my_audience.com'
ALGORITHMS = ["RS256"]


APP = Flask(__name__)

# Error handler
class AuthError(Exception):
    def __init__(self, error, status_code):
        self.error = error
        self.status_code = status_code

@APP.errorhandler(AuthError)
def handle_auth_error(ex):
    #some code


# Format error response and append status code
def get_token_auth_header():
    """Obtains the Access Token from the Authorization Header
    """
    # some code
    return token

def requires_auth(f):
    """Determines if the Access Token is valid
    """
    @wraps(f)
    def decorated(*args, **kwargs):
        #some code
    return decorated


def requires_scope(required_scope):
    """Determines if the required scope is present in the Access Token
    Args:
        required_scope (str): The scope required to access the resource
    """
    #some code

我不断收到这个错误:

Traceback (most recent call last):
  File "C:\Python37\lib\site-packages\flask_restplus\api.py", line 183, in init_app
    app.record(self._deferred_blueprint_init)
AttributeError: 'Flask' object has no attribute 'record'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "app.py", line 16, in <module>
    api.init_app(app)
  File "C:\Python37\lib\site-packages\flask_restplus\api.py", line 186, in init_app
    self._init_app(app)
  File "C:\Python37\lib\site-packages\flask_restplus\api.py", line 204, in _init_app
    self._register_view(app, resource, *urls, **kwargs)
  File "C:\Python37\lib\site-packages\flask_restplus\api.py", line 282, in _register_view
    resource_func = self.output(resource.as_view(endpoint, self, *resource_class_args,
AttributeError: 'function' object has no attribute 'as_view'

如您所见,这个 printstack 的结果根本没有用处,因为这些调用都不是来自我的任何文件。唯一涉及的文件是 app.py,它看起来像这样:

from flask import Flask
from flask_restplus import Api
from apis import api
import config
import os

app = Flask(__name__)

api.init_app(app)#traceback comes from here.
app.run(host='0.0.0.0', port=8080)

apis/__init__.py文件如下所示:

from flask_restplus import Api, fields
from .users import api as users
from flask import Flask



api = Api(
    title='Graph Api',
    version='0.2',
)

api.add_namespace(users)

知道问题是什么吗?如果我将应用程序(烧瓶实例)从其中app.py导入server.py并使用在应用程序中创建的烧瓶实例,而不是以server.py某种方式创建一个新的整个烧瓶实例,错误就会消失,但问题是我会创建一个循环调用依赖项,所以我不能那样做。

标签: pythonapiflask

解决方案


您已经有一个应用程序

APP = Flask(__name__)

而且您的错误处理程序至少正在使用它

然而,你定义了第二个

app = Flask(__name__)

这里__name__app(文件的名称),这可能是破坏事物的原因以及服务器文件没有破坏的原因


推荐阅读