본문 바로가기
○ WEB/21.02 CodeLion_Django Web

[장고 실전2] 5. 블로그 : 업로드

by 0ver-grow 2021. 3. 13.
반응형

사용자 파일 업로드 기능 구현하기

A. 업로드 형태 만들기

1. settings.py

미디어 파일을 올리는 경로를 지정

BASE_DIR에서 media폴더안에 저장된다는 의미

import os

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

MEDIA_URL = '/media'

2. urls.py

from django.conf.urls.static import static

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

3. models.py

이미지 값을 추가하자.

class Blog(models.Model) :
    title = models.CharField(max_length=200,default = '') # 문자열, 괄호안은 제약사항
    body = models.TextField() # 대용량 문자열
    photo = models.ImageField(blank=True, null=True, upload_to='blog_photo') # 지정된 media폴더 > blog_photo 폴더에 저장
    date = models.DateTimeField(auto_now_add=True)

DB에 반영한 장고 클래스를 수정했으므로

1. python manage.py makemigrations 

2. python manage.py migrations : DB에 반영

3. runserver로 확인해보자

admin에서 다음과 같이 확인가능

4. forms.py :

models.py에 form인 photo변수를 추가했으므로 모든 필드타입이 나타나도록 수정

5. form_create.html :

파일을 업로드할 때는 게시글을 작성하는 파일에 다음 코드를 추가해야한다.

enctype="multipart/form-data"

6.  views.py :

파일 업로드 기능도 추가한다.

업로드글 작성후 확인 결과

아직 이미지 파일이 뜨지 않음

하지만 3번 과정에서 지정한 폴더 안에는 해당 사진 파일이 업로드되어 있다

admin 페이지에서 해당글로 접속한 뒤 업로그 파일을 누르면 다음과 같이 업로드한 사진이 뜬다.

7.  detail.html : 업로드한 사진을 html에 나타내기

{{ blog_detail.photo.url }}

{{ blog_detail.photo.path }} 로 입력하면 업로드된 사진의 위치(C:\User\....)가 뜨는데 보안상 이것은 쓰면 안된다.

 

반응형