为lis返回不同的数据

2024-06-01 02:01:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为Angular前端编写FlaskAPI,我的recipe类返回JSON和有关配方的所有信息,但我只需要返回一些有关配方列表的信息,以便更快地加载,并返回有关配方细节的所有信息

所以呢

 @classmethod
    def find_all(cls):
        return cls.query.order_by(cls.time_added.desc()).all() 

应该只返回带有id、name和description的JSON

以及

 def find_by_id(cls, _id):
        return cls.query.filter_by(id=_id).first()

应该返回包含配方所有信息的JSON

最好的解决办法是什么?两个不同的班级或者有什么好的方法吗

非常感谢你的帮助

我的配方型号:

class RecipeModel(db.Model):
    __tablename__ = 'recipes'

    # create recipe table
    id = db.Column(db.Integer, primary_key=True, )
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    cuisine_id = db.Column(db.Integer, db.ForeignKey('cuisine.id'))
    name = db.Column(db.String(150))
    description = db.Column(db.Text)
    image_path = db.Column(db.String(100))
    total_time = db.Column(db.Integer)
    prep_time = db.Column(db.Integer)
    cook_time = db.Column(db.Integer)
    level = db.Column(db.String(45))
    source = db.Column(db.String(45))
    rating = db.Column(db.DECIMAL(3, 2))
    time_added = db.Column(db.Date)

    def __init__(self, user_id, cuisine_id, name, description, image_path, total_time, prep_time, cook_time, level,
                 source, ):
        self.user_id = user_id
        self.cuisine_id = cuisine_id
        self.name = name
        self.description = description
        self.image_path = image_path
        self.total_time = total_time
        self.prep_time = prep_time
        self.cook_time = cook_time
        self.level = level
        self.source = source

    # Return recipe as JSON object
    def json(self):
        return {
            'id': self.id,
            'name': self.name,
            'cuisine_id': self.cuisine_id,
            'description': self.description,
            'image_path': self.image_path,
            'total_time': self.total_time,
            'prep_time': self.prep_time,
            'cook_time': self.cook_time,
            'level': self.level,
            'source': self.source,
        }

    # Find recipe by ID
    @classmethod
    def find_by_id(cls, _id):
        return cls.query.filter_by(id=_id).first()

    # Find all recipes
    @classmethod
    def find_all(cls):
        return cls.query.order_by(cls.time_added.desc()).all()

我的资源:

class RecipesList(Resource):
    @classmethod
    def get(cls):
        return {'recipes': [recipes.json() for recipes in RecipeModel.find_all()]}

Tags: nameimageselfiddbbyreturntime
1条回答
网友
1楼 · 发布于 2024-06-01 02:01:27

与其在模型上使用.json(),不如将序列化程序分为两个(或更多,视需要而定)函数来执行这两种不同的序列化(或者可以使用mode='detail'或其他方法参数化单个序列化函数)

def serialize_recipe_list(recipe):
    return {"id": recipe.id}


def serialize_recipe_detail(recipe):
    return {"id": recipe.id, "more": here}


class RecipesList(Resource):
    @classmethod
    def get(cls):
        return {
            "recipes": [
                serialize_recipe_list(recipe)
                for recipe in RecipeModel.find_all()
            ]
        }


class RecipesDetail(Resource):
    @classmethod
    def get(cls, id):
        recipe = RecipeModel.find_by_id(id)
        return serialize_recipe_detail(recipe)

相关问题 更多 >