LoginSignup
1
2

More than 5 years have passed since last update.

AppEngine/PythonでDjangoのImageFieldを使う

Posted at

AppEngine/PythonでDjangoのImageFieldを使う

画像のアップロード機能なんかをつけるとき、
Django付属のImageFieldを利用すると、
適切な画像かどうかを処理してくれるので便利なのですが、
AppEngineにはPILがないのでうまくいきません。
実際ImageFieldを使ってみると
No module named Image
のようなエラーが出て開発、本番ともに失敗してしまいます。


チラ裏:
 https://developers.google.com/appengine/docs/python/images/installingPIL
 最初このページを見てAppEngineでPILが使えると誤解してしまったため解決に時間がかかりました‥
 実際は、AppEngineではPILが使えず、代わりに画像用のAPIが公開されています。
 開発用のAppEngineサーバーではこのAPIをエミュレートするためにPILを入れてね、というのが正解です。

 PILのインストール方法とかをずっと疑ってました‥。

ダミーPILの導入

DjangoのフレームワークはAppEngine純正のを使うと弄ることができないので、
自分で処理書かなくてはならないのかと思ったのですが、
ググってたら解決策が見つかりました。

Image uploads working with models.ImageField on django-nonrel/appengine w/ django-fileuploads - ZONE – UYSRC Developer Blog

Djangoが使っているPILの機能を、
AppEngineのAPIでラップしたダミーを作るという解決策です。
これならDjangoのコアをいじらずにImageFieldが利用できます。

使い方

PIL/init.py
上にソースがあります。
AppEngineのアプリケーションのルートにPILというフォルダを作成し、
そこに上記のinit.pyを作成すれば準備完了です。
あとは通常のDjangoと同じようにImageFieldが利用できます。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2