반응형
사용자 파일 업로드 기능 구현하기
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\....)가 뜨는데 보안상 이것은 쓰면 안된다.
반응형
'○ WEB > 21.02 CodeLion_Django Web' 카테고리의 다른 글
[장고 실전2] 7. 블로그 : 로그인/로그아웃 (0) | 2021.03.16 |
---|---|
[장고 실전2] 6. 블로그 : 댓글 구현하기 (0) | 2021.03.16 |
[장고 실전2] 4. 블로그 : 쿼리셋, 입력한 데이터를 HTML에 표현하기 (0) | 2021.03.12 |
[장고 실전2] 3. 블로그 : 작성한 글을 html에 띄우기 (0) | 2021.03.12 |
[장고 실전2] 2. 블로그 : 프로젝트에 DB 생성하기 (0) | 2021.03.12 |