python - “烧瓶实例”没有属性“记录”错误
问题描述
我有一个项目,我正在尝试使用具有以下结构的 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
某种方式创建一个新的整个烧瓶实例,错误就会消失,但问题是我会创建一个循环调用依赖项,所以我不能那样做。
解决方案
您已经有一个应用程序
APP = Flask(__name__)
而且您的错误处理程序至少正在使用它
然而,你定义了第二个
app = Flask(__name__)
这里__name__
是app
(文件的名称),这可能是破坏事物的原因以及服务器文件没有破坏的原因
推荐阅读
- c# - System.NullReferenceException:将项目添加到列表时
- linux - git config --global user.email johndoe@example.com 锁定文件错误
- android - service.odtcfactory.sec.com.odtcfactoryservice 是 Android 7.0 上的有效系统应用吗?
- laravel - BadMethodCallException 方法 Illuminate\Database\Query\Builder::merge 不存在
- python - 当我在 python 中使用 else 时,我不断收到错误
- ruby-on-rails - RSpec:工厂级别的停止/存根 after_create 回调?
- python - 对 1000 万对 1x20 向量执行余弦相似度的最快方法
- javascript - 使用 JS 向表单添加输入
- django - Django FieldType 默认字符串参数的用途
- jquery - 使用 jQuery 删除现有文本前面的数字