일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백준
- 이분그래프
- double ended queue
- c++
- 엑셀
- 시간복잡도
- Django란
- getline
- correlation coefficient
- k-eta
- 입/출력
- 알고리즘 공부방법
- Django Nodejs 차이점
- 매크로
- vscode
- EOF
- 장고란
- UI한글변경
- string 함수
- string 메소드
- 구조체와 클래스의 공통점 및 차이점
- 프레임워크와 라이브러리의 차이
- iOS14
- 자료구조
- 입출력 패턴
- 2557
- 연결요소
- 표준 입출력
- Django의 편의성
- scanf
- Today
- Total
Storage Gonie
45. (app3) Photo 모델 생성 / MEDIA_URL 설정 본문
1. settings.py수정, 맨 아래에 두줄 추가.
MEDIA_URL = '/files/' # 업로드하는 과정을 처리하는 url지정.
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads') # 현재 프로젝트 경로에 uploads 폴더를 생성하여 이곳에 업로드한 파일을 저장하겠다는 것.
2. models.py에서 Photo 모델 및 user_path를 만들어주는 메소드 생성.
from django.db import models
from django.conf import settings
# Create your models here.
def user_path(instance, filename): # instance는 Photo 클래스의 객체, filename은 업로드할 파일의 파일이름
from random import choice # string으로 나온 결과에서 하나의 문자열만 뽑아냄
import string # 무작위 문자열을 뽑아내기 위한 용도
arr = [choice(string.ascii_letters) for _ in range(8)] # 무작위로 8글자를 뽑아줌
pid = ''.join(arr) # 파일 아이디생성
extension = filename.split('.')[-1] # 파일이름으로부터 확장자명가져오기
# ex) honux/asfqqwer.png
return '%s/%s.%s' % (instance.owner.username, pid, extension)
class Photo(models.Model):
image = models.ImageField(upload_to=user_path) # 어디에 업로드할지 지정할 수 있음.
owner = models.ForeignKey(settings.AUTH_USER_MODEL) # 하나의 사진은 한명의 사용자에게 속해야 하므로. 1:N의 관계
thumname_image = models.ImageField()
comment = models.CharField(max_length=255)
pub_date = models.DateTimeField(auto_now_add=True) # 사용자가 입력하지 않고 업로드 하는 순간 자동으로 세팅이 됨.
3. 가상환경에서 Pillow설치.
- "pip install Pillow"
- ImageField를 사용하려면 Pillow 모듈이 필요하다.
4. Photo모델 admin.py에 등록
from .models import Photo
admin.site.register(Photo)
5. DB테이블에 Photo등록
- "python manage.py makemigrations"
- "python manage.py migrate"
6. admin페이지에서 확인가능
7. 썸네일 이미지를 제외하고 Image, Owner, Comment를 입력한다. 그리고 저장을 누르면 필수항목인 썸네일 이미지를 선택하라고 하는데 이를 필수가 아닌 선택으로 수정.
- model.py의 Photo모델 정의부분에서 수정하면됨.
- 이후 "python manage.py makemigrations"
- "python manage.py migrate"
- 그런 뒤 다시 사진을 추가해보자.
thumnail_image = models.ImageField(blank=True) # blank가 True이면 폼 입력시 꼭 입력하지 않아도 된다는 의미
8. uploads 폴더가 생성되고 그 밑에 ldgeao99폴더 그 밑에 사진이 저장된 것을 알 수 있다.
9. admin페이지에서 이미지 객체 수정에서 링크를 눌러보면 접속되지 않는데 이를 가능하게 하자.
- 디버깅 할 때만 이를 가능하게 하고, 배포시에는 이를 비활성화 해야한다.
- mysite/urls.py에서 아래의 코드를 추가해준다.
- 그 다음엔 이미지의 링크를 클릭하면 사진으로 넘어감
from django.conf import settings
from django.conf.urls.static import static
# 첫번째 인자 : 어떤 URL을 정적으로 추가할래?, 두번쨰 인자 : 실제는 어디에 있는데?
urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
'웹개발 > Django 웹서비스 개발(인프런)' 카테고리의 다른 글
47. (app3) main view 에서 이미지 보여주기 (0) | 2019.02.26 |
---|---|
46. (app3) photo form 만들기(사진 업로드 페이지) / login 템플릿 수정(로그인 성공시 바로 이전페이지로 이동) (0) | 2019.02.23 |
44. (app3) Django id, pw만 입력받는 회원가입에서 email까지 입력받도록 추가 (0) | 2019.02.22 |
43. (app3) Django id, pw만 입력받는 회원가입 구현 (2) | 2019.02.22 |
42. (app3) Django 로그인과 로그아웃 구현하기 (0) | 2019.02.22 |