torinaブログ

DjangoとBootstrap4で作成したブログ
Python, Django, Kivy, Bootstrap, Apache等のメモです
ソースコード

Python、requestsを使ったアップロード

Python PythonHTTP
2016年3月21日15:39
requestsを使ったアップロードの例です


このように、非常に簡単に行えます
import requests


url = "http://test.com/api/image/"
files = {'upload_file': open("test.png", "rb")}
res = requests.post(url, files=files)




例えば、これをDjangoで受け取りたい場合は以下のようになります
非常にシンプルな例です
from django.http import HttpResponse
from django.views.decorators.http import require_POST
from django.views.decorators.csrf import csrf_exempt
from .models import Photo


@require_POST
@csrf_exempt
def receive_image(request):

    upload_file = request.FILES["upload_file"]
    photo = Photo(title="タイトル", image=upload_file)
    photo.save()
    download_url = "http://test.com/media/" + photo.image.name
    return HttpResponse(download_url, content_type="text/plain")



このデコレータをつけると、CSRF 対策のチェックが無効化されます
具体的には、{% csrf_token %}がなくても動くようになります
外部に公開したい場合やajax等で、やむを得ず使用することがあります
@csrf_exempt


今回はタイトルと画像の2つだけを持つ、Photoモデルを使用しました
upload_file = request.FILES["upload_file"]
image_data = Photo(title="タイトル", image=upload_file)
image_data.save()


ダウンロード用のURLを作成し、それをHttpResponseで返しています。単純にtext/plainです
requestsだと、response.textで画像URLがわかるようになります
download_url = "http://test.com/media/" + photo.image.name
return HttpResponse(download_url, content_type="text/plain")


参考
http://docs.python-requests.org/en/master/user/quickstart/