これまでのところ、基本的な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')}
ファイルはデータベースに保存されますが、画像ディレクトリには保存されません。