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)
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)
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)
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)