예제 #1
0
def show_category(category_id):
    category = Category.query.get_or_404(category_id)
    page = request.args.get('page', 1, type=int)
    per_page = current_app.config['PER_PAGE']  # 考虑字符串问题
    half_page_display = int(current_app.config["HALF_PAGE_DISPLAY"])

    query = Post.query.filter_by(
        published=True).with_parent(category).order_by(Post.timestamp.desc())

    # 源码中提供的方法
    page_params = {
        'total': query.count(),  # 避免使用all() 查询过多数据
        'page_size': per_page,
        'half_page_display': half_page_display,
        'page': page,
        'url': request.full_path.replace('&page={}'.format(page), "")  # 清空页码
    }
    page_params = iPagination(page_params)
    # 筛选当前页面的数据
    offset = (page - 1) * per_page

    posts = query.offset(offset).limit(per_page).all()
    if category.isSubject:
        # 专题文航按照名称排序,方便文章序列的良好化
        posts = sorted(posts, key=lambda x: getTitleIndex(x.title))
    return render_template('blog/category.html',
                           category=category,
                           page_params=page_params,
                           posts=posts)
예제 #2
0
def search_post():
    page = request.args.get('page', 1, type=int)
    if request.method == 'POST':
        targetText = request.form.get('search')
    else:
        targetText = request.args.get('search')
    query = Post.query.filter(Post.title.like(f'%{targetText}%')).order_by(
        Post.timestamp.desc())
    per_page = current_app.config['PER_PAGE']  # 考虑字符串问题
    half_page_display = int(current_app.config["HALF_PAGE_DISPLAY"])

    # FIXME 页面跳转链接设置
    page_url = request.full_path.replace('&page={}'.format(page), "").replace(
        '&search={}'.format(targetText), "")

    page_params = {
        'total': query.count(),
        'page_size': per_page,
        'half_page_display': half_page_display,
        'page': page,
        'url': page_url + f'&search={targetText}'  # 清空页码
    }
    page_params = iPagination(page_params)
    # 筛选当前页面的数据
    offset = (page - 1) * per_page
    posts = query.offset(offset).limit(per_page).all()

    return render_template('blog/index.html',
                           page_params=page_params,
                           posts=posts)
예제 #3
0
def manager_post():
    page = request.args.get('page', 1, type=int)
    per_page = current_app.config['PER_PAGE']  # 考虑字符串问题
    half_page_display = int(current_app.config["HALF_PAGE_DISPLAY"])

    query = Post.query.order_by(Post.timestamp.desc())

    page_params = {
        'total': query.count(),
        'page_size': per_page,
        'half_page_display': half_page_display,
        'page': page,
        'url': request.full_path.replace('&page={}'.format(page), "")  # 清空页码
    }
    page_params = iPagination(page_params)
    # 筛选当前页面的数据
    offset = (page - 1) * per_page
    posts = query.offset(offset).limit(per_page).all()
    return render_template('admin/manage_post.html', page=page, page_params=page_params, posts=posts)
예제 #4
0
def show_post(post_id):
    post = Post.query.get_or_404(post_id)
    page = request.args.get('page', 1, type=int)
    per_page = current_app.config['PER_PAGE']  # 考虑字符串问题
    half_page_display = int(current_app.config["HALF_PAGE_DISPLAY"])

    query = Comment.query.with_parent(post).filter_by(reviewed=True).order_by(
        Comment.timestamp.asc())

    page_params = {
        'total': query.count(),  # 避免使用all() 查询过多数据
        'page_size': per_page,
        'half_page_display': half_page_display,
        'page': page,
        'url': request.full_path.replace('&page={}'.format(page), "")  # 清空页码
    }
    page_params = iPagination(page_params)
    # 筛选当前页面的数据
    offset = (page - 1) * per_page
    comments = query.offset(offset).limit(per_page).all()

    # FIXME 处理用户评论的操作
    if current_user.is_authenticated:
        form = AdminCommentForm()
        form.author.data = current_user.name
        form.email.data = current_app.config['BLOGDOG_EMAIL']
        from_admin = True
        reviewed = True
    else:
        form = CommentForm()
        from_admin = False
        reviewed = False
    if form.validate_on_submit():
        author = form.author.data
        email = form.email.data
        body = form.body.data
        comment = Comment(author=author,
                          email=email,
                          body=body,
                          post=post,
                          from_admin=from_admin,
                          reviewed=reviewed)
        # FIXME 注意被回复对象的ID是如何获取的
        replied_id = request.args.get('reply')
        if replied_id:
            replied_comment = Comment.query.get_or_404(replied_id)
            comment.replied = replied_comment
            #  TODO 发送邮件
            send_new_reply_email(replied_comment)

        db.session.add(comment)
        db.session.commit()
        if current_user.is_authenticated:
            flash("评论完成", "success")
        else:
            flash("评论已完成,等待审核中,感谢你的参与。", "info")
            # todo 发送邮件
            send_new_comment_email(post)
        return redirect(url_for(".show_post", post_id=post_id))

    return render_template('blog/post.html',
                           page_params=page_params,
                           comments=comments,
                           post=post,
                           form=form)