読者です 読者をやめる 読者になる 読者になる

cloverrose's blog

Python, Machine learning, Emacs, CI/CD, Webアプリなど

Djangoのファイルのアップロード

Django Python

Djangoでファイルのアップロードを扱う方法でAmazon.co.jp: 開発のプロが教える標準Django完全解説―Webアプリケーションフレームワーク (デベロッパー・ツール・シリーズ): 増田 泰,中居 良介,露木 誠,松原 豊: 本と変わっていたのでメモ。

アプリケーションを Django 0.96 から 1.0 に移行する — Django v1.1 documentationに変更箇所はまとまっている。参考書はversion0.96以前のもの。

ファイルのアップロードをテストする例

Djangoでファイルのアップロードをテストする - brainstorm

変更箇所

request.FILES['file']['content']

から

request.FILES['file'].read()

に変わった。

read()よりchunks()

また公式サイトにも書いてあるが、read()はアップロードファイル全体を一度に読み込もうとするので、サイズが大きいとシステムに悪影響をおよぼす危険があるので、分割して読み込むchunks()を使うべきである。

ファイルのアップロードをテスト

テスト対象のアプリでは、アップロードされたファイルに一意の名前を新規に割り当ててmedia/uploads/直下に保存することにした。

そこで次の2つの項目をテストすることにした。
1. 一意の名前がちゃんと割り当てられているか?
2. 実際にファイルが保存されているか?

2つ目は、setUp()で以下を行い
1. アップロードするファイルの絶対パをself.absolute_pathname_srcに記憶
2. self.absolute_pathname_srcに実際にファイルが存在するか確認
3. 保存後のファイルの絶対パスをself.absolute_pathnameに記憶
4. self.absolute_pathnameに既にファイルが存在していたら削除

test_()では
1. アップロードするファイルを開き file = open(self.absolute_pathname_src)
2. POST self.client.post('file/upload/', {'file': file})
3. os.path.exists(self.absolute_pathname)をテスト