def get(self): user_obj = Users.get_by_id(session['user_info']['id']) user_dict = user_obj.to_dict(remove_fields_list=['password']) user_dict['fav_sub_tab_count'] = SubTabFav.filter_by_query(user_id=user_dict['id']).count() user_dict['fav_topic_count'] = TopicFav.filter_by_query(user_id=user_dict['id']).count() user_dict['fav_user_count'] = UserFavUser.filter_by_query(user_id=user_dict['id']).count() session['user_info'] = user_dict return user_dict
def post(self): code_key = f'{session.sid}:code' code = redis_store.get(code_key) if code is None or self.input.code.upper() != code.decode('utf-8'): raise VerifyError('图形验证码不正确,请重试') user_obj = check_login(username=self.input.username, password=self.input.password) user_dict = user_obj.to_dict(remove_fields_list=['password']) user_dict['fav_sub_tab_count'] = SubTabFav.filter_by_query(user_id=user_dict['id']).count() user_dict['fav_topic_count'] = TopicFav.filter_by_query(user_id=user_dict['id']).count() user_dict['fav_user_count'] = UserFavUser.filter_by_query(user_id=user_dict['id']).count() session['is_login'] = True session['role_id'] = user_dict['role_id'] session['user_info'] = user_dict # add token to passport passport = Passport.create_or_update( query_dict={'user_id': user_obj.id}, update_dict={'token': session.sid} ) passport.expire = self.get_datetime_now() + current_app.config['REMEMBER_COOKIE_DURATION'] passport.save() return user_dict
def get(self): fav_sub_tab_id_list = [ i.sub_tab_id for i in SubTabFav.filter_by_query( user_id=session['user_info']['id']) ] sub_tab_list = [ i.to_dict() for i in SubTabs.query.filter( SubTabs.id.in_(set(fav_sub_tab_id_list)), SubTabs.available == 1) ] topic_sub_tab_dict = dict() for topic_obj in Topics.query.filter( Topics.sub_tab_id.in_(set([i['id'] for i in sub_tab_list])), Topics.available == 1): if topic_sub_tab_dict.get(topic_obj.sub_tab_id): topic_sub_tab_dict[topic_obj.sub_tab_id] += 1 else: topic_sub_tab_dict[topic_obj.sub_tab_id] = 1 for sub_tab in sub_tab_list: sub_tab['topic_count'] = topic_sub_tab_dict.get(sub_tab['id'], 0) return sub_tab_list
def get(self): data = dict() sub_tab_info = SubTabs.get_by_query(name=self.input.tab).to_dict() sub_tab_info['tab'] = Tabs.get_by_id(sub_tab_info['tab_id']).to_dict() sub_tab_info['other_tabs'] = [ i.to_dict() for i in SubTabs.filter_by_query(tab_id=sub_tab_info['tab_id']) ] data['sub_tab_info'] = sub_tab_info topic_objs = Topics.filter_by_query( sub_tab_id=sub_tab_info['id']).order_by(Topics.time_create.desc()) topic_count = topic_objs.count() if topic_count > 100: page = int(self.input.page) if self.input.page else 1 page_size = 50 topic_objs = topic_objs.offset( (page - 1) * page_size).limit(page_size) topic_list = [_t.to_dict() for _t in topic_objs] user_dict = { i.id: i.to_dict(remove_fields_list=['password']) for i in Users.query.filter( Users.id.in_(set( i['user_id'] for i in topic_list)), Users.available == 1) } last_reply_user_dict = { i.id: i.to_dict(remove_fields_list=['password']) for i in Users.query.filter( Users.id.in_(set(i['last_reply_user_id'] for i in topic_list)), Users.available == 1) } comment_count_dict = dict() comment_objs = Comments.query.filter( Comments.topic_id.in_(set(i['id'] for i in topic_list)), Comments.available == 1) for c in comment_objs: if comment_count_dict.get(c.topic_id): comment_count_dict[c.topic_id] += 1 else: comment_count_dict[c.topic_id] = 1 up_down_dict_list = defaultdict(list) for up_down_obj in TopicUpDown.query.filter( TopicUpDown.topic_id.in_(set(i['id'] for i in topic_list)), TopicUpDown.available == 1): up_down_dict_list[up_down_obj.topic_id].append(up_down_obj.action) for _d in topic_list: _d['user'] = user_dict[_d['user_id']] if _d['last_reply_user_id']: _d['last_reply_user'] = last_reply_user_dict[ _d['last_reply_user_id']] _d['comment_count'] = comment_count_dict.get(_d['id'], 0) # 获取up和down数量 if up_down_dict_list.get(_d['id']): _d['up_count'] = len( [i for i in up_down_dict_list[_d['id']] if i is True]) _d['down_count'] = len( [i for i in up_down_dict_list[_d['id']] if i is False]) else: _d['up_count'] = 0 _d['down_count'] = 0 data['total'] = topic_count data['list'] = topic_list if session.get('is_login'): if SubTabFav.filter_by_query( user_id=session['user_info']['id'], sub_tab_id=sub_tab_info['id']).first(): data['is_fav'] = True else: data['is_fav'] = False return data
def post(self): obj = SubTabs.get_by_query(name=self.input.tab) if self.input.action == 'add': sub_tab_fav_obj = SubTabFav.filter_by_query( sub_tab_id=obj.id, user_id=session['user_info']['id'], show_deleted=True).first() if sub_tab_fav_obj: sub_tab_fav_obj.available = 1 else: sub_tab_fav_obj = SubTabFav() sub_tab_fav_obj.sub_tab_id = obj.id sub_tab_fav_obj.user_id = session['user_info']['id'] sub_tab_fav_obj.save() elif self.input.action == 'cal': sub_tab_fav_obj = SubTabFav.filter_by_query( sub_tab_id=obj.id, user_id=session['user_info']['id']).first() if sub_tab_fav_obj: sub_tab_fav_obj.available = 0 sub_tab_fav_obj.save()
def get(self): data = dict() sub_tab_dict_list = defaultdict(list) for sub_tab in SubTabs.filter_by_query().order_by( SubTabs.sort_num.asc()): sub_tab_dict_list[sub_tab.tab_id].append(sub_tab.to_dict()) tab_list = [ t.to_dict() for t in Tabs.filter_by_query().order_by(Tabs.sort_num.asc()) ] for _d in tab_list: _d['sub_tabs'] = sub_tab_dict_list.get(_d['id']) or [] data['tabs'] = tab_list if self.input.tab: tab_obj = Tabs.filter_by_query(name=self.input.tab).first() if not tab_obj: tab_obj = Tabs.get_by_query(name='tech') else: tab_obj = Tabs.get_by_query(name='tech') topic_objs = Topics.filter_by_query(tab_id=tab_obj.id).order_by( Topics.time_create.desc()) data['tab_topic_count'] = topic_objs.count() topic_list = [_t.to_dict() for _t in topic_objs[:80]] user_dict = { i.id: i.to_dict(remove_fields_list=['password']) for i in Users.query.filter( Users.id.in_(set( i['user_id'] for i in topic_list)), Users.available == 1) } last_reply_user_dict = { i.id: i.to_dict(remove_fields_list=['password']) for i in Users.query.filter( Users.id.in_(set(i['last_reply_user_id'] for i in topic_list)), Users.available == 1) } tab_dict = { i.id: i.to_dict() for i in Tabs.query.filter( Tabs.id.in_(set( i['tab_id'] for i in topic_list)), Tabs.available == 1) } sub_tab_dict = { i.id: i.to_dict() for i in SubTabs.query.filter( SubTabs.id.in_(set( i['sub_tab_id'] for i in topic_list)), SubTabs.available == 1) } comment_count_dict = dict() for c in Comments.query.filter( Comments.topic_id.in_(set(i['id'] for i in topic_list)), Comments.available == 1): if comment_count_dict.get(c.topic_id): comment_count_dict[c.topic_id] += 1 else: comment_count_dict[c.topic_id] = 1 up_down_dict_list = defaultdict(list) for up_down_obj in TopicUpDown.query.filter( TopicUpDown.topic_id.in_(set(i['id'] for i in topic_list)), TopicUpDown.available == 1): up_down_dict_list[up_down_obj.topic_id].append(up_down_obj.action) for _t in topic_list: _t['user'] = user_dict[_t['user_id']] if _t['last_reply_user_id']: _t['last_reply_user'] = last_reply_user_dict[ _t['last_reply_user_id']] _t['tab'] = tab_dict[_t['tab_id']] _t['sub_tab'] = sub_tab_dict[_t['sub_tab_id']] _t['comment_count'] = comment_count_dict.get(_t['id'], 0) # 获取up和down数量 if up_down_dict_list.get(_t['id']): _t['up_count'] = len( [i for i in up_down_dict_list[_t['id']] if i is True]) _t['down_count'] = len( [i for i in up_down_dict_list[_t['id']] if i is False]) else: _t['up_count'] = 0 _t['down_count'] = 0 data['topics'] = topic_list data['user_count'] = Users.filter_by_query().count() data['topic_count'] = Topics.filter_by_query().count() data['comment_count'] = Comments.filter_by_query().count() today_time_start = self.strptime( self.get_datetime_now().strftime('%Y-%m-%d'), '%Y-%m-%d') today_topic_list = [ i.to_dict() for i in Topics.query.filter( Topics.time_create >= today_time_start, Topics.available == 1) ] if today_topic_list: today_comment_dict = dict() for _c in Comments.query.filter( Comments.topic_id.in_( set([i['id'] for i in today_topic_list])), Comments.available == 1): if today_comment_dict.get(_c.topic_id): today_comment_dict[_c.topic_id] += 1 else: today_comment_dict[_c.topic_id] = 1 for today_topic in today_topic_list: today_topic['comment_count'] = today_comment_dict.get( today_topic['id'], 0) today_hot_topic_list = sorted(today_topic_list, key=lambda x: x['comment_count'], reverse=True) if len(today_hot_topic_list) >= 10: today_hot_topic_list = today_hot_topic_list[:10] else: today_hot_topic_list = [] data['hot_topics'] = today_hot_topic_list if session.get('is_login'): fav_sub_tab_id_list = [ i.sub_tab_id for i in SubTabFav.filter_by_query( user_id=session['user_info']['id']) ] sub_tab_list = [ i.to_dict() for i in SubTabs.query.filter( SubTabs.id.in_(set(fav_sub_tab_id_list)), SubTabs.available == 1) ] data['fav_tabs'] = sub_tab_list return data