代码之家  ›  专栏  ›  技术社区  ›  Hide

烧瓶棉花糖定制田

  •  0
  • Hide  · 技术社区  · 6 年前

    我用烧瓶棉花糖和蒙哥发动机。

    这是我的api.py

    class BoardSchema(ma.Schema):
        class Meta:
            fields = ('no', 'title', 'body', 'tags', 'created_at', 'views')
    
    board_schema = BoardSchema()
    boards_schema = BoardSchema(many=True)
    
    
    class ArticleList(Resource):
        def get(self):
            articles = Board.objects.all()
            return boards_schema.jsonify(articles)
    

    模型.py

    from datetime import datetime
    from mongoengine import *
    from config import DB_NAME
    
    
    connect(DB_NAME)
    
    
    class Board(Document):
        d = datetime.now()
        date = "{}-{}-{}".format(d.year, d.month, d.day)
    
        no = SequenceField()
        title = StringField(required=True)
        body = StringField(required=True)
        tags = ListField(StringField())
        likes = ListField(StringField())
        views = ListField(StringField())
        password = StringField(required=True)
        created_at = DateTimeField(default=date)
        updated_at = DateTimeField(default=date)
    

    当我访问/文章时,结果是这样的->

    {
      "body": "123", 
      "created_at": "2018-08-20T00:00:00+00:00", 
      "no": 1, 
      "tags": [
        "MySQL", 
        "C"
      ], 
      "title": "\ud14c\uc2a4\ud2b8", 
      "views": [
        "127.0.0.1"
      ]
    }
    

    在里面 "views" ,将添加阅读文章的ip。

    但是我想计算所有的视图列表并将其包含到我的结果中。

    我想要的结果就在这里。

    {
      "body": "123", 
      "created_at": "2018-08-20T00:00:00+00:00", 
      "no": 1, 
      "tags": [
        "MySQL", 
        "C"
      ], 
      "title": "\ud14c\uc2a4\ud2b8", 
      "views": 20
    }
    

    我是新来的烧瓶棉花糖,所以我很困惑如何解决这个问题。

    谢谢。

    1 回复  |  直到 6 年前
        1
  •  0
  •   bc291    6 年前

    也许你可以这样试试:

    class BoardSchemaCustom(ma.ModelSchema):
        class Meta:
            model = Board
    
        views = ma.fields.method(deserialize="_custom_serializer")
    
        def _custom_serializer(self, obj):
            return len(obj.views)
    

    custom_board_schema = BoardSchemaCustom()
    

    扔掉它:

    dump, errors = custom_board_schema.schema.dump(Board.query.first())
    >>> dump
    
        2
  •  0
  •   killer John    5 年前

    我也有同样的问题。我的代码在安装之后就可以工作了 棉花糖

    pip install marshmallow-sqlalchemy
    

    见官方文件 https://flask-marshmallow.readthedocs.io/en/latest/