def edit_post(post_id): post = Post.query.get_or_404(post_id) if not (current_user.is_admin or int(post.user_id) == int(current_user.user_id)): abort(403) form = PostForm(form=request.form) post_tags = post.tags if request.method == 'POST' and form.validate(): publish = False filename = None if form.publish.data: publish = True if 'cover_image' in request.files: cover_image = request.files['cover_image'] image_name = cover_image.filename image_name_parts = image_name.split('.') image_name = append_timestamp( image_name_parts[0]) + '.' + image_name_parts[1] filename = uploads.save(cover_image, name=image_name) if post.title != form.title.data: post.post_title = form.title.data post.content = form.content.data post.published = publish if filename: # Remove previous image file, to save space if post.cover_image: upload_dir = current_app.config.get('UPLOAD_DIR', '') os.unlink(os.path.join(upload_dir, post.cover_image)) post.cover_image = filename # remove previous tags remove_tags(post_id) # add new tags tags = form.tags.data for tag_id in tags: tag = check_tag(tag_id) if tag: post.tags.append(tag) db.session.add(post) db.session.commit() flash('Post edited successfully', 'success') return redirect(url_for('admin.list_posts')) form.title.data = post.title form.tags.data = [tag.tag_id for tag in post_tags] form.content.data = post.content form.publish.data = bool(post.published) data = { 'title': 'Edit Post', 'form': form, 'post': post, } return render_template('admin/posts/edit.html', **data)
def create_post(): form = PostForm(form=request.form) if request.method == 'POST' and form.validate(): publish = False filename = None if form.publish.data: publish = True if 'cover_image' in request.files: cover_image = request.files['cover_image'] image_name = cover_image.filename image_name_parts = image_name.split('.') image_name = append_timestamp( image_name_parts[0]) + '.' + image_name_parts[1] filename = uploads.save(cover_image, name=image_name) post = Post() post.post_title = form.title.data post.content = form.content.data post.user_id = current_user.user_id post.published = publish if filename: post.cover_image = filename tags = form.tags.data for tag_id in tags: tag = check_tag(tag_id) if tag: post.tags.append(tag) db.session.add(post) db.session.commit() flash('Post created successfully', 'success') return redirect(url_for('admin.list_posts')) data = { 'title': 'Create Post', 'form': form, } return render_template('admin/posts/create.html', **data)