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

ほんじゃら堂

めんどくさい仕事をラクにする作業自動化レシピ集

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

django IT系・技術系

アップロードしたファイルを保存する処理のサンプルが全然見つからなくて苦労した。
やはりこういう新しい技術を使う時はソースを読まねばならんか。


ここでサンプル発見。助かりました。
http://d.hatena.ne.jp/SumiTomohiko/20070126/1169768661


また、画像のサイズを変更したりできるらしい、こちらのライブラリのPhotoFieldというのをImageFieldの代わりに使ってみる。
http://www.verdjn.com/wiki/PhotoField


まだアップロードできることを確認しただけだけども、メモしておこう。


models.py

from django.db import models
from verdjnlib.fields import PhotoField
class Photo(models.Model):
image = PhotoField("写真", upload_to='photos', height=1024, width=1024)


upload_test.html

...
<form action="/picture/upload/" method="POST" enctype="multipart/form-data">
写真をアップロード
<input type="file" name="image_file" />
<input type="submit" value="アップロードする" />
</form>
...


views.py

from django.shortcuts import render_to_response
from django.template import RequestContext
from test.main.models import Photo
def picture_upload(request):
if request.method == "POST":
post_data = request.POST
post_data.update(request.FILES)
photo = Photo()
image_file = post_data["image_file"]
if image_file:
filename = image_file["filename"]
photo.image = filename
photo.save_image_file(filename, image_file["content"])
photo.save()
message = "アップロードを完了しました"
else:
message = "アップロードに失敗しました"
else:
message = "アップロードに失敗しました"
return render_to_response('complete.html', {'message': message}, context_instance=RequestContext(request))


次は、サムネイル用画像保存処理やら、入力チェックを追加したい。
画像を表示する処理も作らねば。