Flask-restful AttributeError: type object 'Project' has no attribute 'as_view'

问题描述 投票:0回答:1

所以我仍在学习 Flask 中的结构,似乎 Flask 提供了太多的灵活性,这让我难以决定,所以我尝试将我的 Resource 类添加到具有当前结构的 API

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

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

回溯(最后一次通话):

文件“e:\project-py un.py”,第 6 行,在 来自 api import * 文件“e:\project-py pi_init_.py”,第 9 行,在 from .project import * 文件“e:\project-py pi\project.py”,第 6 行,在 @api.add_resource(Project, '/v1/project') 文件“C:\Users okie\Anaconda3 nvs\py39-rest-flask\lib\site-packages lask_restful_init_.py", 第 391 行,在 add_resource
self.register_view(self.app, resource, *urls, **kwargs) 文件“C:\Users okie\Anaconda3 nvs\py39-rest-flask\lib\site-packages lask_restful_init.py", 第 431 行,在_register_view
resource_func = self.output(resource.as_view(endpoint, *resource_class_args, AttributeError: type object 'Project' has no attribute '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)

Config.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

api init.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 *

最后是project.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': []
            })
python flask flask-restful
1个回答
0
投票

我无法检查但是...

模型 (

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

因为模型

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

您可能必须先用不同的名称定义类,然后使用新类

add_resource()

class MyProject(Resource):
   # ... code ...  

api.add_resource(MyProject, '/v1/project')
© www.soinside.com 2019 - 2024. All rights reserved.