【发布时间】:2018-08-20 12:18:27
【问题描述】:
我使用flask-marshmallow 和mongoengine。
还有用于我的 API 服务器的 flask-restplus。
这是我的 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)
当我访问 /article 时,结果是这样的 ->
{
"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
}
我是 flask-marshmallow 的新手,所以我很困惑如何解决这个问题。
谢谢。
【问题讨论】:
-
首先应该按StringField类型查看?如果它是整数会更容易。
-
我看不到你查看单篇文章的逻辑/端点,但你可以像这样增加查看次数:
single_article = Board.objects.first()single_article.views = single_article.views + 1 -
可能是IntField,所以声明
views = IntField() -
@needtobe
views必须是StringField在ListField内。因为每个查看者的 IP 地址都将存储在视图字段中。因此,一个 ip 可以增加一个查看次数。 -
@needtobe 所以,我想计算所有视图并将其表示为我的结果。