Пример #1
0
def create_post():
    form = PostForm()

    db_sess = db_session.create_session()
    categories = db_sess.query(Category).all()
    # заполнение комбобокса категориями
    form.category.choices = [(c.id, c.name) for c in categories]

    if form.validate_on_submit():
        post = Post()
        post.title = form.title.data
        post.content = form.content.data
        post.author_id = current_user.id

        path = 'static/img/thumbnails'
        filename = f'post_{uuid.uuid4().hex}.jpg'

        if form.icon.data:
            # если прикреплённый файл является изображением
            if form.icon.data.content_type.startswith('image'):
                image: Image.Image = Image.open(form.icon.data)
                image.thumbnail((350, 350))
                image = image.convert('RGB')
                image.save(os.path.join(path, filename))
                post.icon = filename
            else:
                return render_template('add_edit_post.html',
                                       title='Добавление поста',
                                       message='Надо прекреплять изображение',
                                       form=form)

        categories = db_sess.query(Category).filter(
            Category.id.in_(form.category.data)).all()
        post.add_categories(categories)

        db_sess.add(post)
        db_sess.commit()

        return redirect('/')

    return render_template('add_edit_post.html',
                           title='Добавление поста',
                           form=form,
                           categories=categories)
Пример #2
0
def add_post():
    if not current_user.is_authenticated:
        return redirect('/login')
    form = AddPostForm()
    content = form.content.data
    if request.method == 'POST' and content:
        session = db_session.create_session()
        post = Post(user=session.query(User).get(current_user.id))
        post.content = content
        hash_tags = extract_hash_tags(content)
        for hash_tag in hash_tags:
            tag = Tag()
            tag.tag = hash_tag
            tag.post_id = post.id
            tag.post = post
            session.add(tag)
        session.add(post)  # TODO: TO USE API IN FUTURE
        session.commit()
    return render_template('add_post.html', form=form)
Пример #3
0
def add_post():
    """ Обработчик страницы создания поста """

    form = PostForm()
    if form.validate_on_submit():
        session = db_session.create_session()
        post = Post()
        post.title = form.title.data
        post.content = form.content.data
        post.string_created_date = str(datetime.datetime.now())[0:16]
        current_user.posts.append(post)
        session.merge(current_user)
        session.commit()
        if bool(form.attachment.data):
            session = db_session.create_session()
            post = session.query(Post).order_by(Post.id.desc()).first()
            f = form.attachment.data
            type = f.filename.split('.')[-1]
            filename = f'post_attachment_{post.id}.{type}'
            path = os.path.join('static', 'attachments', filename)
            f.save(path)
            post.attachment = path
            session.commit()

        post_id = session.query(Post).order_by(Post.id.desc()).first().id

        # Параллельным процессом запускаем рассыку новости всем зарегистрированным пользователям
        thread.start_new_thread(
            os.system, (f'python send_news_emails.pyw --id {post_id}', ))

        return redirect('/blog')

    return render_template('post.html',
                           title='Новый пост',
                           form=form,
                           css=url_for('static',
                                       filename='css/post_style.css'))