Django REST Framework ImageField 이용하기

Reading time ~2 minutes

Django REST Framework 에서 특정 model에 ImageField를 추가하여 api를 통해 image file을 업로드, 요청 하는 방법에 대해서 알아본다. Django REST Framework 시작하기 에서 사용했던 Person model과 HyperlinkedModelSerializer를 사용한다.


Person Model

myapp/models.py

from django.db import models


class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    image = models.ImageField(default='media/default_image.jpeg')

Person model에 image 라는 ImageField 를 정의한다. default 값이 필요하므로 기본 이미지로 하고싶은 이름을 지정한다.


PersonSerializer

DRF ImageField을 참고하여 HyperlinkedModelSerializer을 이용하여 구현한 PersonSerializer에 image 필드를 추가한다.

myapp/serializers.py

from myapp.models import Person
from rest_framework import serializers


class PersonSerializer(serializers.HyperlinkedModelSerializer):
    image = serializers.ImageField(use_url=True)

    class Meta:
        model = Person
        fields = ('first_name', 'last_name', 'image')

serializers 의 ImageField를 이용하고, class Metafields에 ‘image’를 추가한다.


MEDIA Settings

image 파일들을 관리하기 위해 tutorial/ 위치에 media 폴더를 생성하고, django에 MEDIA_ROOT, MEDIA_URL, urls.py 를 설정해준다. media 폴더에 default 이미지로 지정했던 default_image.jpeg 이미지를 넣어준다.

tutorial/settings.py


# ...

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

tutorial/urls.py

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


Run

$ python manage.py makemigrations
$ python manage.py migrate
$ python manage.py runserver

browser를 키고 localhost:8000 에 접속하면 아래와 같은 화면이 뜬다.

home result

http://localhost:8000/persons/ 링크를 클릭한 후에, 양식에 맞게 이름 데이터를 입력하고 테스트 image 파일을 선택한다. (여기서는 test_image.png라는 이름의 이미지 파일을 사용한다.)

input form

POST 버튼을 누르면 입력한 데이터의 POST 요청에 대한 정보가 출력된다. image 필드를 보면 http://localhost:8000/media/test_image.png 라는 url이 지정된 것을 확인할 수 있다.

request result

url을 클릭해보면 test_image.png 이미지가 보여진다.

test image result

tutorial/media 폴더에 default_image.png 이미지도 존재하므로 아래와 같이 url을 요청하면 해당 이미지에 대한 응답이 온다.

default image result

MySQL root password 변경

mysql의 root 비밀번호를 변경할 때 update user set password=password('1234') where user='root'; 명령을 입력했는데 ERROR 1054 (42S22): Unknown column 'pass...… Continue reading