본문 바로가기
코딩공부/Django

Django 이미지 업로드 기능 구현 / TIL_221018

by Dong_Devlog 2022. 10. 18.
Django 이미지 업로드 구현하기

 

로그인 한 후에 자신의 계정에 사진을 저장할 수 있는 기능을 만들 때,

사용할 수 있는 이미지 업로드 기능을 구현해보고자 한다.

 

앱은 user와 photo를 생성

 

 

settings.py에서 업로드 된 이미지를 저장할 수 있도록 media 경로를 설정

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

 

urls.py에도 + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 업로드 된 파일의 경로를 설정

 

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('user.urls')),
    path('', include('photo.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

models.py에서 이미지를 저장할 수 있는 db table을 생성하면 ImageField로 필드를 하나 생성

class PhotoModel(models.Model):
    class Meta:
        db_table = "photo"
        
    user = models.ForeignKey(UserModel, on_delete=models.CASCADE)
    imgfile = models.ImageField(upload_to='photo/', null=True, blank=True)

 

forms.py 작성

class ImageUpload(forms.ModelForm):
    class Meta:
        model = PhotoModel
        fields = ['imgfile']

 

view.py에서 업로드 된 파일을 db에 저장할 수 있도록 작성

user는 ForeignKey를 사용했기 때문에 아래와 같이 코드를 작성

def fileUpload(request):
    if request.method == 'POST':
        photo = PhotoModel()
        user = request.user

        photo.user = user
        photo.imgfile = request.FILES["imgfile"]
        photo.save()

        return redirect('/upload')
    else:
        imageupload = ImageUpload
        context = {
            'imageupload': imageupload,
        }
        return render(request, 'mainpage.html', context)

 

그리고 템플릿을 작성해 준 다음 runserver를 하면 업로드 기능을 사용할 수 있다.

media 폴더가 생성되고 이미지가 업로드 된다.

댓글