Web フォームではなく、アプリ (iOS android など) からの投稿。
class someImage(models.Model):
image = models.ImageField(upload_to= settings.SHARE_IMAGE_UPLOAD_PATH)
@csrf_exempt
def saveImage(request):
ビューの書き方は?投稿リクエストで画像を受け取ります。私が見つけたものはすべてフォーム関連です(サーバー初心者)
Web フォームではなく、アプリ (iOS android など) からの投稿。
class someImage(models.Model):
image = models.ImageField(upload_to= settings.SHARE_IMAGE_UPLOAD_PATH)
@csrf_exempt
def saveImage(request):
ビューの書き方は?投稿リクエストで画像を受け取ります。私が見つけたものはすべてフォーム関連です(サーバー初心者)
ModelForm
実際の HTML フォームを使用してデータを送信していないからといって、 を使用してリクエストを処理できないわけではありません。
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed
from django.utils import simplejson
def upload_view(request):
if request.method == 'POST':
form = UploadForm(request.POST, request.FILES)
if form.is_valid():
form.save()
result = {'success': True}
return HttpResponse(simplejson.dumps(result), mimetype='application/json')
else:
return HttpResponseBadRequest()
else:
return HttpResponseNotAllowed(['POST'])
編集: 上記で選択した回答を使用してください - 以下のコードは質問に対して機能しますが、お勧めしません。
アップロードする画像ファイルは次の場所にあります。
request.FILES['image'] # assuming input name is called 'image'
Image オブジェクトではなく UploadedFile オブジェクトを返します。ドキュメントのこの部分を読むことができます (Django 1.3.x を使用していると仮定しています): https://docs.djangoproject.com/en/1.3/topics/http/file-uploads/#handling-uploaded-files
UploadedFile オブジェクトで使用できるフィールドとメソッド、およびファイルのアップロードを手動で処理する一般的な方法について説明します。同じ方法を使用して、画像ファイルをファイル オブジェクトに書き込み、それを ImageField に保存できます。
次のコードは機能するはずですが、安全なコードではありません。*nix マシンを使用していると仮定していますが、そうでない場合は、宛先ファイルを別の場所に保存してください。
@csrf_exempt
def saveImage(request):
# warning, code might not be safe
up_file = request.FILES['image']
destination = open('/tmp/' + up_file.name , 'wb+')
for chunk in up_file.chunks():
destination.write(chunk)
destination.close()
img = someImage()
img.image.save(up_file.name, File(open('/tmp/' + up_file.name, 'r')))
img.save()
# return any response you want after this
その他の注意事項: フォームが機能するためには、フォームに次の属性があることを確認してください。
<form enctype="multipart/form-data" ... >
この使い方が普通だった記憶はありませんが、本当は Forms が推奨されています。