Exemple #1
0
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)
Exemple #2
0
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)