Beispiel #1
0
def topics():
    forum_id = request.args.get('forumId', type=int)
    page = request.args.get('pageIndex', 1, type=int)
    perpage = request.args.get('pageSize', 10, type=int)
    keywords = request.args.get('keywords')

    p = Praises.query.filter(Praises.status == 1).subquery()
    c = Comments.query.filter(Comments.status == 1).subquery()
    query = db.Query([Topics, func.count(p.c.user_id.distinct()).label('praisenum'), \
        func.count(c.c.comment_id.distinct()).label('commentnum'), Forums.name], db.session()) \
        .filter(Topics.forum_id == forum_id, Topics.status >= 1) \
        .outerjoin(p, p.c.topic_id == Topics.topic_id) \
        .outerjoin(c, c.c.topic_id == Topics.topic_id) \
        .join(Forums, Forums.forum_id == Topics.forum_id) \
        .group_by(Topics.topic_id).order_by(Topics.last_modify_time.desc())

    if keywords:
        keywords = keywords.split(' ')
        topics = []
        for keyword in keywords:
            topics.extend(
                query.filter(
                    or_(Topics.content.like('%' + keyword + '%'),
                        Topics.title.like('%' + keyword + '%'))).all())
        pagenum = int(math.ceil(len(topics) / perpage))
        try:
            topics = topics[(page - 1) * perpage:page *
                            perpage] if page < pagenum else topics[(page - 1) *
                                                                   perpage:]
        except:
            topics = topics[0:perpage] if len(topics) > perpage else topics

    else:
        query = query.paginate(page, perpage, False)

        topics = query.items
        pagenum = query.pages

    user_ids = [t.Topics.user_id for t in topics]
    users = {
        a.uid: (a.nickname, a.profileUrl)
        for a in Account.query.filter(Account.uid.in_(user_ids)).all()
    }
    forumName = Forums.query.filter(Forums.forum_id == forum_id).first().name

    return jsonify({
        'result': 'true',
        'msg': {
            'forumName': forumName,
            'page': page,
            'pagenum': pagenum,
            'basics': [TopicNode(t, users).pack_res() for t in topics]
        }
    })
Beispiel #2
0
def newsdetail():
    news_id = request.args.get('news_id', 1, type=int)
    detail = db.Query([NewsBasic, NewsDetail], db.session()).filter(
        NewsBasic.id == news_id, NewsBasic.articleId == NewsDetail.id).first()
    if detail.NewsBasic.provinceId != 'all':
        provinceName = db.Query(Province.province_name, db.session()).filter(
            Province.province_id == detail.NewsBasic.provinceId).scalar()
        if detail.NewsBasic.majorId != 'all':
            majorId = str(detail.NewsBasic.majorId).split('_')[1]
            majorName = db.Query(Major.major_name, db.session()).filter(
                Major.major_id == majorId,
                Major.province_name == provinceName).first()[0]
        else:
            majorName = '全部'
    else:
        provinceName = '全部'
        majorName = '全部'
    return jsonify({
        'result':
        'true',
        'msg':
        NewsDetailNode(detail, majorName, provinceName).pack_res()
    })
Beispiel #3
0
def topic():
    topic_id = request.args.get('topicId', type=int)
    p = Praises.query.filter(Praises.status == 1).subquery()
    c = Comments.query.filter(Comments.status == 1).subquery()
    topic = db.Query([Topics, func.count(p.c.user_id.distinct()).label('praisenum'), func.count(c.c.comment_id.distinct()).label('commentnum'), Forums.name], db.session()) \
        .filter(Topics.topic_id == topic_id) \
        .outerjoin(p, p.c.topic_id == Topics.topic_id) \
        .outerjoin(c, c.c.topic_id == Topics.topic_id) \
        .join(Forums, Forums.forum_id == Topics.forum_id) \
        .group_by(Topics.topic_id).order_by(Topics.last_modify_time.desc()).first()
    users = {
        a.uid: (a.nickname, a.profileUrl)
        for a in Account.query.filter(
            Account.uid == topic.Topics.user_id).all()
    }
    return jsonify({
        'result': 'true',
        'msg': TopicNode(topic, users).pack_res()
    })
Beispiel #4
0
def replyComment():
    if request.form['user_id']:
        topic_id = int(request.form['topic_id'])
        reply_id = int(request.form['reply_id'])
        parentcomment = Comments.query.get(reply_id)
        reply_floor_no = db.Query(
            func.count(Comments.comment_id),
            db.session()).filter(Comments.topic_id == topic_id,
                                 Comments.comment_id <= reply_id).first()[0]
        comment = Comments(content=request.form['content'], pub_time=func.unix_timestamp(), images=request.form['images'], status=1, \
            topic_id=topic_id, forum_id=int(request.form['forum_id']), user_id=request.form['user_id'], user_name=request.form['user_name'], \
            reply_id=reply_id, reply_floor_no=reply_floor_no, reply_user_id=parentcomment.user_id, reply_user_name=parentcomment.user_name, \
            reply_content=parentcomment.content)
        db.session.add(comment)
        db.session.commit()
        return jsonify({'result': 'true'})
    else:
        return jsonify({
            'result': 'false',
            'msg': 'The request does not have a user_id'
        })
Beispiel #5
0
def getcomments():
    articleId = request.args.get('articleId', 1, type=int)
    page = request.args.get('page', 1, type=int)
    perpage = request.args.get('perpage', 10, type=int)

    #子查询方法
    ParentComment = aliased(NewsComment)
    ParentUser = aliased(Account)
    query = db.Query([NewsComment, Account.nickname, Account.profileUrl, ParentComment.content.label('parentcomment'), \
        ParentUser.nickname.label('parentuser')],db.session()).filter(NewsComment.articleId == articleId) \
        .outerjoin(Account, Account.uid == NewsComment.uid).outerjoin(ParentComment, ParentComment.id == NewsComment.parentId). \
        outerjoin(ParentUser, ParentUser.uid == ParentComment.uid).order_by(NewsComment.id).paginate(page, perpage, False)
    comments = query.items
    pagenum = query.pages

    return jsonify({
        'result': 'true',
        'msg': {
            'comments': [CommentNode(c).pack_res() for c in comments]
        },
        'page': page,
        'pagenum': pagenum
    })