2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

udemyによるAWSの勉強④ - AWS S3とdjangoの連携 - 画像アップロード

Last updated at Posted at 2021-01-31

#◆udemyの教材
本記事を作成するにあたって、参考にしたudemyの教材は以下のものになります。

これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座(SAA-C02試験対応版)
https://www.udemy.com/share/101WKk/

#◆本記事の内容
udemyにてAWS S3がどういうものかを理解しました。
そこで、簡単なWebサイトを作り、AWS S3と連携させます。

  • 画像ファイルをS3に保存する方法
  • S3に保存してある画像をwebサイトに表示する方法は以前の記事で紹介しましたので、そちらを参考にしてください。

#◆参照サイト
https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html

https://qiita.com/sand/items/b897aa47c304b7fbdcb5

#◆環境準備

  • AWS S3のバケット作成
  • djangoの設定ファイル変更は以前の記事で紹介しましたので、そちらを参考にしてください。

#◆views.pyの編集

from django.views.generic import TemplateView, CreateView
from .forms import PhotoForm
from .models import PhotoModel

----
class Photo(CreateView):
#class AwsUploadView(TemplateView):
    model = PhotoModel
    form_class = PhotoForm
    template_name = 'aws_upload/aws_upload.html'
    success_url = 'upload/'
    #success_url = 'aws_upload/aws_upload.html'

    def get_context_data_photo(self, **kwargs):
        #最初に継承元のメソッドを呼び出す
        ctxt = super(Photo, self).get_context_photo(**kwargs)
        ctxt["photos"] = PhotoModel.objects.all()
        return ctxt

#◆htmlファイルの編集

アップロードテスト用のページとして以下を用意しました。

<h1>Upload test</h1>

<form action="" method="POST" enctype="multipart/form-data">{% csrf_token %}        {{ form.as_p }}
    <button type="submit">アップロード</button>
</form>

{% for photo in photos %}
    <a href="{{ photo.image.url }}">{{ photo }}</a>
    <hr>
{% endfor %}

#◆models.pyの編集

from django.db import models

# Create your models here.

class PhotoModel(models.Model):
    image = models.ImageField(upload_to='images')

    def __str__(self):
        return self.image.url

#◆forms.pyの作成

from django import forms
from .models import PhotoModel

class PhotoForm(forms.ModelForm):
    class Meta:
        model = PhotoModel
        fields = '__all__'

#◆urls.py(アプリ側)の編集

from django.urls import path

from .views import IndexView, MaskedView, MainView, AboutView, AwsView, Photo

urlpatterns = [
    ---
    path('upload/', Photo.as_view())
]

#◆Webサイトでの確認

まずは正常に表示されることを確認しました。

image.png

ファイルを選択してみます。
「ファイルを選択」をクリックすると以下のようなファイル選択画面が出てきます。

image.png

ファイルを選択すると、選択されたファイル名が表示されます。

image.png

「アップロード」をクリックします。
以下のようなエラーが表示されました。

image.png

1度AWS S3を確認します。
AWS S3には画像がアップロードされていることが確認出来ました。

image.png

しかし、アップロードクリック後の画面が表示されない問題について解決する必要があります。
解決できましたら、内容を更新します。(2021/1/31 調査中)

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?