You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.4 KiB
72 lines
2.4 KiB
from flask import (render_template, url_for, flash,
|
|
redirect, request, abort, Blueprint)
|
|
from flask_login import current_user, login_required
|
|
from minibase import db
|
|
from minibase.database.models import Post
|
|
from minibase.posts.forms import postForm
|
|
from minibase.config import themeMinibase
|
|
|
|
# Declaring a blueprint
|
|
posts = Blueprint('posts', __name__)
|
|
|
|
|
|
@posts.route("/post/new", methods=['GET', 'POST'])
|
|
@login_required
|
|
def new_post():
|
|
form = postForm()
|
|
if form.validate_on_submit():
|
|
post = Post(title=form.title.data, content=form.content.data, author=current_user)
|
|
db.session.add(post)
|
|
db.session.commit()
|
|
flash('Your post has been created', 'success')
|
|
return redirect(url_for('main.home'))
|
|
return render_template('create_post.html',
|
|
title='Create Post',
|
|
legend='Create Post',
|
|
theme=themeMinibase,
|
|
form=form)
|
|
|
|
|
|
@posts.route("/post/<int:post_id>")
|
|
def post(post_id):
|
|
post = Post.query.get_or_404(post_id)
|
|
return render_template('post.html',
|
|
title=post.title,
|
|
post=post,
|
|
theme=themeMinibase)
|
|
|
|
|
|
@posts.route("/post/<int:post_id>/update", methods=['GET', 'POST'])
|
|
@login_required
|
|
def post_update(post_id):
|
|
post = Post.query.get_or_404(post_id)
|
|
if post.author != current_user:
|
|
abort(403)
|
|
form = postForm()
|
|
if form.validate_on_submit():
|
|
post.title = form.title.data
|
|
post.content = form.content.data
|
|
db.session.commit()
|
|
flash('Your post has been updated', 'success')
|
|
return redirect(url_for('posts.post', post_id=post.id))
|
|
elif request.method == 'GET':
|
|
form.title.data = post.title
|
|
form.content.data = post.content
|
|
return render_template('create_post.html',
|
|
title='Update Post',
|
|
legend='Update Post',
|
|
theme=themeMinibase,
|
|
form=form)
|
|
|
|
|
|
@posts.route("/post/<int:post_id>/delete", methods=['POST'])
|
|
@login_required
|
|
def post_delete(post_id):
|
|
post = Post.query.get_or_404(post_id)
|
|
if post.author != current_user:
|
|
abort(403)
|
|
db.session.delete(post)
|
|
db.session.commit()
|
|
flash('Your post has been deleted', 'success')
|
|
return redirect(url_for('main.home'))
|