Python 3.x 是否将现有sql alchemy模型类用作restplus api.model?

Python 3.x 是否将现有sql alchemy模型类用作restplus api.model?,python-3.x,model,flask-restplus,Python 3.x,Model,Flask Restplus,我正在开发一个CRUD应用程序,使用vue.js和vuetify作为前端(视图),使用python flask resplus和sqlAlchemy作为后端(控制器和模型) app/main/model/person.py from sqlalchemy import Column, Integer, String, Date from app.main.repository.base_repository import Base class Person(Base):

我正在开发一个CRUD应用程序,使用vue.js和vuetify作为前端(视图),使用python flask resplus和sqlAlchemy作为后端(控制器和模型)

app/main/model/person.py

from sqlalchemy import Column, Integer, String, Date
from app.main.repository.base_repository import Base

    class Person(Base):
        __tablename__ = 'person'

        id = Column(Integer, primary_key=True)
        name = Column(String)
        date_of_birth = Column(Date)

        def __init__(self, name=None, date_of_birth=None):
            if name is not None:
                self.name = name
            if date_of_birth is not None:
                self.date_of_birth = date_of_birth
app/main/controller/person\u controller.py

from flask_restplus import Namespace, fields, Resource, cors
from flask import request
from app.main.service.person_service import PersonService
from app.main.model.person import Person

api = Namespace('persons', description='Person related operations')

persServ : PersonService = PersonService()

model = api.model('Person', {
    'id': fields.Integer,
    'name': fields.String,
    'date_of_birth': fields.Date
})

@api.route("/persons/all")
class PersonList(Resource):
    @api.marshal_with(model)
    def get(self, **kwargs):
        return persServ.get_persons()
        # return Person(name="Test", date_of_birth=date(1984, 10, 20))

@api.route("/person/<int:id>")
class PersonReturn(Resource):
    @api.marshal_with(model)
    def get(self, id):
        return persServ.get_person(id)

@api.route("/person/<int:id>")
class PersonUpdate(Resource):
    @api.marshal_with(model)
    def put(self, id):
        data = request.json
        #TODO marshalling currently still error
        return persServ.update_person(pers=data)

@api.route("/person")
class PersonCreate(Resource):
    @api.marshal_with(model)
    def post(self):
        data = request.json
        #TODO: check why person is not correctly linked to sql alchemy when reated here, make sure that model.Person is created
        # pers = Person()
        # pers.name = data['name']
        # persServ.create_person(pers)
        return persServ.create_person_02(data['name'])

@api.route("/person/<int:id>")
class PersonDelete(Resource):
    def delete(self, id):
        persServ.delete_person(id)
        return '', 204
从flask_restplus导入命名空间、字段、资源、cors
从烧瓶进口请求
从app.main.service.person\u服务导入PersonService
从app.main.model.person导入person
api=名称空间('persons',description='Person-related operations')
Perserv:PersonService=PersonService()
模型=api.model('人'{
“id”:字段。整数,
“名称”:字段。字符串,
“出生日期”:字段。日期
})
@api.路线(“/人/所有”)
类个人列表(资源):
@api.marshal_与(模型)
def get(自身,**kwargs):
return perserv.get_persons()
#返回人(姓名=“测试”,出生日期=日期(1984年10月20日))
@api.路线(“/person/”)
类PersonReturn(资源):
@api.marshal_与(模型)
def get(自我,id):
return perserv.get\u person(id)
@api.路线(“/person/”)
班级人员更新(资源):
@api.marshal_与(模型)
def put(自我,id):
data=request.json
#TODO编组当前仍然存在错误
返回perserv.update\u person(pers=数据)
@api.路线(“/人”)
类PersonCreate(资源):
@api.marshal_与(模型)
def post(自我):
data=request.json
#TODO:检查为什么在此处创建时person未正确链接到sql alchemy,确保已创建model.person
#pers=人()
#pers.name=数据['name']
#人事服务创建人(pers)
返回perserv.create_person_02(数据['name'])
@api.路线(“/person/”)
类PersonDelete(资源):
def delete(自我,id):
个人服务删除人(id)
返回“”,204
在实现spring java后端后还有一些问题:

1) 是否需要在person\u controller.py中提供api.model,或者我可以在person.py中注释属性?你能帮我看一本注释现有物体的教程吗

2) 命名flask api类:在我看来,使用PersonList和Person而不是PersonUpdate、PersonCreate来简化api文档是非常有意义的,如flask resPlus完整示例中所述:
但是,我已经在Person.py中有了一个Person类。我考虑使用两个person类,一个person(Resource)in person_controller.py用于Post、Put和Get操作,另一个person in person.py作为特定于域的person对象。但是,我不想造成混乱,坚持命名和组织良好实践。建议的命名方法是什么?有一个很好的示例教程吗?

flask\u restplus要求您为文档、类型定义、输入序列化和输出封送定义
api.model
。。使用SQL Alchemy模型(或来自任何其他框架的模型)来定义
api.model
,没有任何集成。请查看此软件包,它可以满足您的要求: