def put(self, target): """ 修改文章 """ req_parser = RequestParser() req_parser.add_argument('draft', type=inputs.boolean, required=False, location='args') req_parser.add_argument('title', type=inputs.regex(r'.{5,30}'), required=True, location='json') req_parser.add_argument('content', type=inputs.regex(r'.+'), required=True, location='json') req_parser.add_argument('cover', type=self._cover, required=True, location='json') req_parser.add_argument('channel_id', type=self._channel_id, required=True, location='json') args = req_parser.parse_args() content = args['content'] cover = args['cover'] draft = args['draft'] ret = db.session.query(func.count(Article.id)).filter(Article.id == target, Article.user_id == g.user_id).first() if ret[0] == 0: return {'message': 'Invalid article.'}, 400 # 对于自动封面,生成封面 cover_type = cover['type'] if cover_type == -1: cover = self._generate_article_cover(content) Article.query.filter_by(id=target).update(dict( channel_id=args['channel_id'], title=args['title'], cover=cover, status=Article.STATUS.DRAFT if draft else Article.STATUS.UNREVIEWED )) ArticleContent.query.filter_by(id=target).update(dict(content=content)) try: db.session.commit() except Exception as e: current_app.logger.error(e) db.session.rollback() return {'message': 'Server has something wrong.'}, 507 # 清除缓存 cache_user.UserArticlesCache(g.user_id).clear() cache_article.ArticleInfoCache(target).clear() cache_article.ArticleDetailCache(target).clear() # if not draft: # TODO 机器审核 # TODO 新文章消息推送 return {'id': target}, 201
def get(self, article_id): """ 获取文章详情 :param article_id: int 文章id """ user_id = g.user_id # 查询文章数据 exist = cache_article.ArticleInfoCache(article_id).exists() if not exist: abort(404, message='The article does not exist.') article = cache_article.ArticleDetailCache(article_id).get() article['is_followed'] = False article['attitude'] = None # 增加用户是否收藏了文章 article['is_collected'] = False if user_id: # 非匿名用户添加用户的阅读历史 try: cache_user.UserReadingHistoryStorage(user_id).save(article_id) except ConnectionError as e: current_app.logger.error(e) # 查询关注 # article['is_followed'] = cache_user.UserFollowingCache(user_id).determine_follows_target(article['aut_id']) article['is_followed'] = cache_user.UserRelationshipCache( user_id).determine_follows_target(article['aut_id']) # 增加用户是否收藏了文章 article['is_collected'] = cache_user.UserArticleCollectionsCache( g.user_id).determine_collect_target(article_id) # 更新阅读数 cache_statistic.ArticleReadingCountStorage.incr(article_id) cache_statistic.UserArticlesReadingCountStorage.incr(article['aut_id']) return article
def get(self, article_id): """ 获取文章详情 :param article_id: int 文章id """ # 写入埋点日志 qs_parser = RequestParser() qs_parser.add_argument('Trace', type=inputs.regex(r'^.+$'), required=False, location='headers') args = qs_parser.parse_args() user_id = g.user_id # 查询文章数据 exist = cache_article.ArticleInfoCache(article_id).exists() if not exist: abort(404, message='The article does not exist.') article = cache_article.ArticleDetailCache(article_id).get() # 推荐系统所需埋点 if args.Trace: write_trace_log(args.Trace, channel_id=article['ch_id']) article['is_followed'] = False article['attitude'] = None # 增加用户是否收藏了文章 article['is_collected'] = False if user_id: # 非匿名用户添加用户的阅读历史 try: cache_user.UserReadingHistoryStorage(user_id).save(article_id) except ConnectionError as e: current_app.logger.error(e) # 查询关注 # article['is_followed'] = cache_user.UserFollowingCache(user_id).determine_follows_target(article['aut_id']) article['is_followed'] = cache_user.UserRelationshipCache(user_id).determine_follows_target(article['aut_id']) # 查询登录用户对文章的态度(点赞or不喜欢) try: # article['attitude'] = cache_article.ArticleUserAttitudeCache(user_id, article_id).get() article['attitude'] = cache_user.UserArticleAttitudeCache(user_id).get_article_attitude(article_id) except SQLAlchemyError as e: current_app.logger.error(e) article['attitude'] = -1 # 增加用户是否收藏了文章 article['is_collected'] = cache_user.UserArticleCollectionsCache(g.user_id).determine_collect_target(article_id) # 获取相关文章推荐 article['recomments'] = [] try: similar_articles = self._feed_similar_articles(article_id) for _article_id in similar_articles: _article = cache_article.ArticleInfoCache(_article_id).get() article['recomments'].append({ 'art_id': _article['art_id'], 'title': _article['title'] }) except Exception as e: current_app.logger.error(e) # 更新阅读数 cache_statistic.ArticleReadingCountStorage.incr(article_id) cache_statistic.UserArticlesReadingCountStorage.incr(article['aut_id']) return article