2

これまでのところ、基本的なWTForms FileFieldを使用していますが、ファイルをアップロードすることはできますが、ディレクトリに保存されるのではなく、POSTGRESQLデータベースに として保存されます<Binary data>。ディレクトリに保存してブラウザに表示する方法。私はそれを正しく行っているかどうかわかりません。画像をアップロードしてブラウザに表示したいだけです。

記事モデル

class Article(Base):
    __tablename__ = 'articles'
    id = Column(Integer, primary_key=True)
    title = Column(String(255), unique=True, nullable=False)
    body = Column(Text, default=u'')
    image_field = Column(BYTEA)
    category_id = Column(Integer, ForeignKey(Category.id))
    category = relationship(Category)
    created = Column(DateTime, default=datetime.datetime.utcnow)
    edited = Column(DateTime, default=datetime.datetime.utcnow)

    @classmethod
    def all(cls):
        return DBSession.query(Article).order_by(sa.desc(Article.created))

    @classmethod
    def by_id(cls, id):
        return DBSession.query(Article).filter(Article.id == id).first()

    @property
    def slug(self):
        return urlify(self.title)

    @property
    def created_in_words(self):
        return time_ago_in_words(self.created)

    @classmethod
    def get_paginator(cls, request, page=1):
        page_url = PageURL_WebOb(request)
        return Page(Article.all(), page, url=page_url, items_per_page=4)

View.py

@view_config(route_name='article_action', match_param="action=create",
             renderer="edit_blog.mako",
             permission='create')
def article_create(request):
    article = Article()
    form = ArticleCreateForm(request.POST)
    if request.method == 'POST' and form.validate():
        if form.image.data:
            filename = request.POST['image'].filename
            input_file = request.POST['image'].file
            file_path = os.path.join('static/images', filename)
            with open(file_path, 'wb') as output_file:
                shutil.copyfileobj(input_file, output_file)

        form.populate_obj(entry)
        DBSession.add(entry)
        return HTTPFound(location=request.route_url('home'))
    return {'form': form, 'action': request.matchdict.get('action')}

ファイルはデータベースに保存されますが、画像ディレクトリには保存されません。

4

1 に答える 1