class WidgetList(MethodView): decorators = [login_required, admin_permission.require(401)] template_name = 'blog_admin/widgets.html' def get(self): widgets = models.Widget.objects.all() data = { 'widgets': widgets, } return render_template(self.template_name, **data)
class ReposView(MethodView): decorators = [ login_required, admin_permission.require(401), ] template_name = 'main/repos.html' def get(self): repos = models.Repo.objects().all() languages = models.GitmarkMeta.objects(key='language').first() cur_page = request.args.get('page', 1) cur_language = request.args.get('language') repos = repos.filter(language=cur_language) if cur_language else repos url_params = 'language={0}'.format( cur_language) if cur_language else None repos = repos.paginate(page=int(cur_page), per_page=PER_PAGE) #group by aggregate language_cursor = models.Repo._get_collection().aggregate([{ '$match': { 'starred_users': current_user.username } }, { '$group': { '_id': { 'language': '$language' }, 'name': { '$first': '$language' }, 'count': { '$sum': 1 }, } }]) data = { 'repos': repos, 'languages': languages.value_list if languages else [], 'cur_language': cur_language, 'url_params': url_params } data['language_cursor'] = language_cursor return render_template(self.template_name, **data)
class SuPostsList(MethodView): decorators = [login_required, admin_permission.require(401)] template_name = 'blog_admin/su_posts.html' def get(self): posts = models.Post.objects.all().order_by('-update_time') cur_type = request.args.get('type') # post_types = posts.distinct('post_type') if cur_type: posts = posts.filter(post_type=cur_type) cur_page = request.args.get('page', 1) if not cur_page: abort(404) posts = posts.paginate(page=int(cur_page), per_page=PER_PAGE) data = {'posts': posts, 'post_types': POST_TYPES, 'cur_type': cur_type} return render_template(self.template_name, **data)
class Widget(MethodView): decorators = [login_required, admin_permission.require(401)] template_name = 'blog_admin/widget.html' def get(self, pk=None, form=None): widget = None if pk: widget = models.Widget.objects.get_or_404(id=pk) if widget.md_content: widget.content = widget.md_content widget.content_type = 'markdown' else: widget.content = widget.html_content widget.content_type = 'html' if not form: if pk: form = forms.WidgetForm(obj=widget) else: form = forms.WidgetForm() data = { 'form': form, 'widget': widget, 'post_types': POST_TYPES, } return render_template(self.template_name, **data) def post(self, pk=None, form=None): form = forms.WidgetForm(request.form) if not form.validate(): return self.get(pk, form) if pk: widget = models.Widget.objects.get_or_404(id=pk) else: widget = models.Widget() widget.title = form.title.data.strip() if form.content_type.data == 'html': widget.html_content = form.content.data.strip() widget.md_content = None else: widget.md_content = form.content.data.strip() widget.priority = form.priority.data allow_post_types = request.form.get('allow_post_types').split(',') widget.allow_post_types = [ post_type.strip() for post_type in allow_post_types ] update_time = request.form.get('update_time') if update_time: widget.update_time = update_time widget.save() msg1 = 'Succeed to create widget' msg2 = 'Succeed to update widget' msg = msg1 if pk else msg2 flash(msg, 'success') return redirect(url_for('blog_admin.su_widgets')) def delete(self, pk): widget = models.Widget.objects.get_or_404(id=pk) widget.delete() if request.args.get('ajax'): return 'success' redirect_url = url_for('blog_admin.su_widgets') flash('Succeed to delete the widget', 'success') return redirect(redirect_url)
class SuPost(MethodView): decorators = [login_required, admin_permission.require(401)] template_name = 'blog_admin/su_post.html' def get_context(self, slug, form=None): post = models.Post.objects.get_or_404(slug=slug) if not form: # post.post_id = str(post.id) # post.tags_str = ', '.join(post.tags) form = forms.SuPostForm(obj=post) categories = models.Post.objects.distinct('category') tags = models.Post.objects.distinct('tags') context = { 'form': form, 'display_slug': slug, 'post': post, 'categories': categories, 'tags': tags, 'post_types': POST_TYPES, } return context def get(self, slug, form=None): context = self.get_context(slug, form) return render_template(self.template_name, **context) def post(self, slug): form = forms.SuPostForm(request.form) if not form.validate(): return self.get(slug, form) # return form.author.data.username # if slug: # post = models.Post.objects.get_or_404(slug=slug) # else: # post = models.Post() # post.author = get_current_user() post = models.Post.objects.get_or_404(slug=slug) post.title = form.title.data.strip() post.slug = form.slug.data.strip() post.fix_slug = form.fix_slug.data.strip() post.raw = form.raw.data.strip() abstract = form.abstract.data.strip() post.abstract = abstract if abstract else post.raw[:140] post.is_draft = form.is_draft.data post.author = form.author.data # post.post_type = form.post_type.data.strip() if form.post_type.data else None post.post_type = request.form.get('post_type') or post.post_type pub_time = request.form.get('publish_time') update_time = request.form.get('update_time') if pub_time: post.pub_time = datetime.datetime.strptime(pub_time, "%Y-%m-%d %H:%M:%S") if update_time: post.update_time = datetime.datetime.strptime( update_time, "%Y-%m-%d %H:%M:%S") redirect_url = url_for('blog_admin.su_posts') post.save(allow_set_time=True) flash('Succeed to update post', 'success') return redirect(redirect_url)