示例#1
0
文件: api.py 项目: zqqq/super-bbs
 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
示例#2
0
文件: api.py 项目: zqqq/super-bbs
    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
示例#3
0
    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
示例#4
0
    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
示例#5
0
 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()
示例#6
0
文件: api.py 项目: zqqq/super-bbs
    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