烧瓶休息属性错误:类型对象"项目"没有属性"as_view"



所以我仍在学习烧瓶中的结构,似乎烧瓶给了我太多的灵活性,这让我有点困惑,所以我试图将我的Resource类添加到具有当前结构的API中

api
/__init__.py
/project.py
models
/project_management.py
configs.py
configs.json
run.py

但运行时返回错误AttributeError:类型对象"Project"没有属性"as_view">

Traceback(最后一次调用(:

文件";e: \project py\run.py";,第6行,在从api导入*文件";e: \project py\api_init_.py";,第9行,infrom.project import*File";e: \project py\api\project.py";,第6行,在@api.add_resource(Project,'/v1/Project'(文件"C: \Users\rokie\Anaconda3\envs\py39 rest flack\lib\site packages\flask_restful_init_.py",第391行,在add_resource
self中register_view(self.app,resource,*urls,**kwargs(文件"C: \Users\rokie\Anaconda3\envs\py39 rest flack\lib\site packages\flask_restful_init.py",第431行,在_register_view中
resource_func=self.output(resource.as_view(endpoint,*resource_class_args,AttributeError:类型对象"Project"没有属性"as_view">

我的run.py

from functools import wraps
from flask import Flask, session, g, render_template, flash
# from flask_cors import CORS, cross_origin
from flask_wtf.csrf import CSRFProtect
from pages import *
from api import *
from config import create_app
app = create_app()
app.app_context().push()
# app.register_blueprint(pages)
app.register_blueprint(api, url_prefix='/api')
# app.secret_key = "ff82b98ef8727e388ea8bff063"
csrf = CSRFProtect()
csrf.init_app(app)

if __name__ == "__main__":
app.run(host='127.0.0.1',debug=True)

配置py

import json
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
# from flask_wtf.csrf import CSRFProtect
from flask_login import LoginManager
from flask_cors import CORS, cross_origin

db = SQLAlchemy()
ma = Marshmallow()
f = open('configs.json')
config = json.load(f)

def create_app():
app = Flask(__name__, template_folder='templates')
app.config['SQLALCHEMY_DATABASE_URI'] = config['config']['database']
app.config['SECRET_KEY'] = config['config']['secret_key']
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
api_v1_cors_config = {
"origins": ["*"]
}
CORS(app, resources={
r"/api/*": api_v1_cors_config
})
db.init_app(app)
ma.init_app(app)
login_manager = LoginManager()
login_manager.login_view = 'pages.login'
login_manager.init_app(app)
from models.user_management import User
@login_manager.user_loader
def load_user(user_id):
# since the user_id is just the primary key of our user table, use it in the query for the user
return User.query.get(int(user_id))
return app

apiinit.py名为"api"的文件夹作为包

from flask import Blueprint
from flask_restful import Api
api_bp=Blueprint('api',__name__)
api = Api(api_bp)
# from .login import *
# from .api_project import *
from .project import *
# from .master_user import *

最后是项目.py

from . import api
from flask import Flask, jsonify, request
from flask_restful import Resource, Api
from models.project_management import Project, ProjectStatus, Task
@api.add_resource(Project, '/v1/project')
class Project(Resource):
def get(self):
try:
print('test')
projects = Project.query.all()
return jsonify({
'message': 'Data get success',
'data': projects,
})
except Exception as e:
return jsonify({
'message': f'failed to get data {e}',
'data': []
})

我无法检查,但。。。

模型(Project.query.all()(和类class Project(Resource)具有相同的名称Project,这可能会造成问题。

因为模型Project是在add_resource()之前创建(导入(的,所以它使用此模型,但必须使用class Project

您可能必须首先定义具有不同名称的类,然后使用新类使用add_resource()

class MyProject(Resource):
# ... code ...  
api.add_resource(MyProject, '/v1/project')

最新更新