def category_posts(category_id): form = SearchForm() categories = Categories.objects() page = request.args.get('page', 1, type=int) category = Categories.objects(id=category_id).first_or_404() posts = Post.objects(category=category).order_by("-date_posted").paginate( page=page, per_page=4) return render_template("posts/posts_categories.html", title=f"{category.category_name} Posts", posts=posts, heading=f"{category.category_name} Posts", form=form, category=category, categories=categories)
def update_post(post_id): post = Post.objects().get_or_404(id=post_id) # throw a 403 error if a user has managed to get to this # page and they weren't the posts author. if post.author.id != current_user.id: abort(403) form = PostForm() categories = [(cat.category_name) for cat in Categories.objects] form.category.choices = categories # saves post to the database on form submition if form.validate_on_submit(): category = Categories.objects(category_name=form.category.data).first() post.title = form.title.data post.content = form.content.data post.category = category.id post.save() flash("Your post has been updated", "success") return redirect(url_for("posts.post", post_id=post.id)) # fills the form with the details from the database elif request.method == "GET": form.title.data = post.title form.content.data = post.content form.category.data = post.category.category_name return render_template("posts/update_post.html", title="Update Post", form=form)
def search(): form = SearchForm() categories = Categories.objects() query_param = request.args.get("query") # gets the query paramater for paginatio if query_param: query = query_param # gets posts and paginates elif request.method == "POST": query = form.search.data page = request.args.get('page', 1, type=int) posts = Post.objects.search_text(query).order_by('$text_score').paginate( page=page, per_page=4) print(posts) # if no posts are found in search it redirects to current page and # flashes a message if not posts.items: flash("No results Found. Please search again", "errors") return redirect(request.referrer) return render_template("posts/search_results.html", title="Search Results", posts=posts, heading="Search Results", form=form, categories=categories, query=query)
def dashboard(): if current_user.username != "admin": abort(403) users = User.objects() posts = Post.objects() categories = Categories.objects() return render_template("admin/dashboard.html", title="Dashboard", users=users, posts=posts, categories=categories,)
def all_posts(): form = SearchForm() categories = Categories.objects() # Paginates the results setting 4 posts per page page = request.args.get("page", 1, type=int) posts = Post.objects().order_by("-date_posted").paginate(page=page, per_page=4) return render_template("posts/all_posts.html", title="Latest Posts", posts=posts, heading="Recent Posts", form=form, categories=categories)
def delete_category(category_id): if current_user.username != "admin": abort(403) form = DeleteCategoryForm() if request.method == "POST": category = Categories.objects().get_or_404(id=category_id) posts = Post.objects(category=category) category.delete() posts.delete() flash("Category has been deleted", "success") return redirect(url_for("admin.dashboard")) return render_template("admin/delete_category.html", title="Delete Category", form=form)
def users_posts(username): categories = Categories.objects() form = SearchForm() page = request.args.get('page', 1, type=int) user = User.objects(username=username).first_or_404() posts = Post.objects(author=user.id).order_by("-date_posted").paginate( page=page, per_page=4) return render_template("users/users_posts.html", title=f"{user.username}'s Posts", posts=posts, heading=f"{user.username}'s Posts", form=form, categories=categories, user=user)
def edit_category(category_id): if current_user.username != "admin": abort(403) category = Categories.objects().get_or_404(id=category_id) form = EditCategoryForm() if request.method == "GET": form.category_name.data = category.category_name if form.validate_on_submit(): category.category_name = form.category_name.data category.save() flash("Category has been changed", "success") return redirect(url_for('admin.dashboard')) return render_template("admin/edit_category.html", form=form, title="Edit Category")
def add_post(): form = PostForm() # get categorie names for select input and loop thorough them categories = [(category.category_name) for category in Categories.objects] form.category.choices = categories # add the post to the database on form submit if form.validate_on_submit(): category = Categories.objects(category_name=form.category.data).first() post = Post(title=form.title.data, content=form.content.data, author=current_user.id, category=category.id) post.save() flash("post has been posted successfully", "success") return redirect(url_for("posts.all_posts")) return render_template("posts/new_post.html", title="New Post", form=form)