class ImportCommentView(MethodView): decorators = [login_required, editor_permission.require(401)] template_name = 'blog_admin/import_comments.html' def get(self, form=None): if not form: form = forms.ImportCommentForm() data = {'form': form} return render_template(self.template_name, **data) def post(self): form = forms.ImportCommentForm(obj=request.form) if not form.validate(): return self.get(form=form) if form.json_file.data and form.import_format.data=='file': msg = 'Import from file is not ready yet' flash(msg, 'warning') return redirect(url_for('blog_admin.import_comments')) try: comment_json = json.loads(form.content.data) except: msg = 'Json data error' flash(msg, 'warning') return redirect(url_for('blog_admin.import_comments')) url_regx = re.compile('^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$') def clean_url(url): if not url: return None url = url.replace('\\', '') clean = url_regx.match(url) if not clean: # print url return None return url imported_comments = comment_json['posts'] for import_comment in imported_comments: comment = models.Comment() comment.author = import_comment['author_name'] comment.email = import_comment['author_email'] comment.homepage = clean_url(import_comment['author_url']) comment.post_slug = import_comment['thread_key'] comment.post_title = import_comment['thread_key'] comment.md_content = import_comment['message'] comment.pub_time = dateutil.parser.parse(import_comment['created_at']) comment.update_time = dateutil.parser.parse(import_comment['updated_at']) comment.status = 'approved' comment.misc = 'duoshuo' comment.save() msg = 'Succeed to import comments' flash(msg, 'success') return redirect(url_for('blog_admin.comments_approved'))
class Comments(MethodView): decorators = [login_required, editor_permission.require(401)] def delete(self): if request.args.get('ajax') == 'true' and request.args.get( 'action') == 'clear_comments': comments = models.Comment.objects(status='pending') comments.delete() flash('All pending comments has been deleted', 'success') # flash(request.args.get('action')) # return redirect(url_for('blog_admin.comments')) return 'All pending comments has been deleted'
class Comment(MethodView): decorators = [login_required, editor_permission.require(401)] template_name = 'blog_admin/comments.html' def get(self, status='pending', pk=None): if pk: return redirect(url_for('blog_admin.comments')) data = {} comments = models.Comment.objects(status=status) keyword = request.args.get('keyword') if keyword: comments = comments.filter(md_content__icontains=keyword) try: cur_page = int(request.args.get('page', 1)) except: cur_page = 1 comments = comments.paginate(page=cur_page, per_page=10) data['status'] = status data['comments'] = comments data['keyword'] = keyword return render_template(self.template_name, **data) def put(self, pk): comment = models.Comment.objects.get_or_404(pk=pk) comment.status = 'approved' comment.save() if request.args.get('ajax'): return 'success' msg = 'The comment has been approved' flask(msg, 'success') return redirect(url_for('blog_admin.comments_approved')) def delete(self, pk): comment = models.Comment.objects.get_or_404(pk=pk) comment.delete() if request.args.get('ajax'): return 'success' msg = 'The comment has been deleted' flask(msg, 'success') return redirect(url_for('blog_admin.comments_approved'))
class PostStatisticList(MethodView): decorators = [login_required, editor_permission.require(401)] template_name = 'blog_admin/post_statistics.html' def get(self): posts = models.PostStatistics.objects.all() try: cur_page = int(request.args.get('page', 1)) except: cur_page = 1 posts = posts.paginate(page=cur_page, per_page=PER_PAGE * 2) return render_template(self.template_name, posts=posts)
class PostStatisticDetail(MethodView): decorators = [login_required, editor_permission.require(401)] template_name = 'blog_admin/post_statistics_detail.html' def get(self, slug): post = models.Post.objects.get_or_404(slug=slug) post_statistics = models.PostStatistics.objects.get_or_404(post=post) trackers = models.Tracker.objects(post=post) try: cur_page = int(request.args.get('page', 1)) except: cur_page = 1 trackers = trackers.paginate(page=cur_page, per_page=PER_PAGE*2) data = {'post_statistics':post_statistics, 'trackers':trackers, 'post':post } return render_template(self.template_name, **data)