新闻收藏功能
需求分析:
- 进入到新闻详情页之后,如果用户已收藏该新闻,则显示已收藏,点击则为取消收藏,反之点击收藏该新闻
- 因为只更新界面上部分元素,所以收藏和取消收藏的逻辑
代码实现
代码实现分为以下几步:
- 前端根据后台返回数据显示收藏或者取消收藏按钮
- 后端提供收藏与取消收藏接口
- 前端发起收藏或者取消收藏请求
前端是否收藏界面展示
- 在新闻详情的视图函数中添加变量
is_collected
,并在渲染模板时传入
@news_blu.route('/<int:news_id>')
@user_login_data
def news_detail(news_id):
...
# 判断是否收藏该新闻,默认值为 false
is_collected = False
# 判断用户是否收藏过该新闻
if g.user:
if news in g.user.collection_news:
is_collected = True
data = {
"news": news.to_dict(),
"click_news_list": click_news_list,
"is_collected": is_collected,
"user_info": g.user.to_dict() if g.user else None,
}
return render_template('news/detail.html', data=data)
- 前端根据传入值判断显示哪一个a标签,并使用标签记录当前新闻id,以供后续逻辑使用
<a href="javascript:;" class="collected block-center" data-newid="{{ data.news.id }}" style="display: {% if data.is_collected %} block
{% else %} none {% endif %};"><span class="out">已收藏</span><span class="over">取消收藏</span></a>
<a href="javascript:;" class="collection block-center" data-newid="{{ data.news.id }}" style="display: {% if data.is_collected %} none
{% else %} block {% endif %};">收藏</a>