#!/usr/bin/env python # -*- coding: utf-8 -*- # ************************************************************************** # Copyright © 2016 jianglin # File Name: views.py # Author: jianglin # Email: xiyang0807@gmail.com # Created: 2016-12-22 21:49:05 (CST) # Last Update: Wednesday 2019-05-08 15:09:18 (CST) # By: # Description: # ************************************************************************** from flask import render_template, request from forums.api.tag.db import Tags from forums.api.topic.db import Topic from forums.api.collect.db import Collect from forums.api.user.db import User from forums.common.response import HTTPResponse from forums.common.views import IsAuthMethodView as MethodView from forums.api.message.db import MessageClient class FollowingTagsView(MethodView): def get(self): user = request.user page, number = self.pageinfo filter_dict = {'followers__username': user.username} tags = Tags.query.filter_by(**filter_dict).paginate(page, number, True) data = {'tags': tags} return render_template('follow/following_tags.html', **data) def post(self): user = request.user post_data = request.data tag_id = post_data.pop('tagId', None) if tag_id is not None and not User.query.filter_by( following_tags__id=tag_id).exists(): tag = Tags.query.filter_by(id=tag_id).first_or_404() user.following_tags.append(tag) user.save() return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response() def delete(self): user = request.user post_data = request.data tag_id = post_data.pop('tagId', None) if tag_id is not None and User.query.filter_by( following_tags__id=tag_id).exists(): tag = Tags.query.filter_by(id=tag_id).first_or_404() user.following_tags.remove(tag) user.save() return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response() class FollowingTopicsView(MethodView): def get(self): user = request.user page, number = self.pageinfo filter_dict = {'followers__username': user.username} topics = Topic.query.filter_by(**filter_dict).paginate(page, number, True) data = {'topics': topics} return render_template('follow/following_topics.html', **data) def post(self): user = request.user post_data = request.data topic_id = post_data.pop('pk', None) if topic_id is not None and not User.query.filter_by( following_topics__id=topic_id).exists(): topic = Topic.query.filter_by(id=topic_id).first_or_404() user.following_topics.append(topic) user.save() # notice MessageClient.follow(topic) return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response() def delete(self): user = request.user post_data = request.data topic_id = post_data.pop('pk', None) if topic_id is not None and User.query.filter_by( following_topics__id=topic_id).exists(): topic = Topic.query.filter_by(id=topic_id).first_or_404() user.following_topics.remove(topic) user.save() return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response() class FollowingUsersView(MethodView): def get(self): user = request.user page, number = self.pageinfo users = user.following_users.paginate(page, number, True) data = {'users': users} return render_template('follow/following_users.html', **data) def post(self): user = request.user post_data = request.data user_id = post_data.pop('userId', None) if user_id is not None: f_user = User.query.filter_by(id=user_id).first_or_404() if not f_user.is_followed(user): user.following_users.append(f_user) user.save() MessageClient.follow(f_user) return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response() def delete(self): user = request.user post_data = request.data user_id = post_data.pop('userId', None) if user_id is not None: f_user = User.query.filter_by(id=user_id).first_or_404() if f_user.is_followed(user): user.following_users.remove(f_user) user.save() return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response() class FollowingCollectsView(MethodView): def get(self): user = request.user page, number = self.pageinfo filter_dict = {'followers__username': user.username} collects = Collect.query.filter_by(**filter_dict).paginate( page, number, True) data = {'collects': collects} return render_template('follow/following_collects.html', **data) def post(self): user = request.user post_data = request.data collect_id = post_data.pop('collectId', None) if collect_id is not None and not User.query.filter_by( following_collects__id=collect_id).exists(): collect = Collect.query.filter_by(id=collect_id).first_or_404() user.following_collects.append(collect) user.save() return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response() def delete(self): user = request.user post_data = request.data collect_id = post_data.pop('collectId', None) if collect_id is not None and User.query.filter_by( following_collects__id=collect_id).exists(): collect = Collect.query.filter_by(id=collect_id).first_or_404() user.following_collects.remove(collect) user.save() return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response()