1. Static 파일
- 개발 리소스 (JS, CSS, Image 등)
- 앱 / 프로젝트 단위로 저장 / 서빙
- FileField / ImageField를 통해 저장한 모든 파일
- DB필드에는 저장경로를 저장하며 파일은 파일 스토리지에 저장
- 프로젝트 단위로 저장
- HttpRequest.FILES를 통해 파일이 전달
- 뷰 로직이나 폼 로직을 통해, 유효성 검증을 수행
- FileField / ImageField 필드에 경로를 저장
- settings.MEDIA_ROOT 경로에 파일을 저장
FileField와 ImageField
FileField
- File Storage API를 통해 파일을 저장
ImageField (FileField 상속)
- Pillow (이미지 처리 라이브러리)를 통해 이미지 width/height 획득
- upload_to 옵션: settings.MEDIA_ROOT 하위에서 저장한 파일명 / 경로명 결정 (default: 파일명 그대로 settings.MEDIA_ROOT에 저장)
Model Manager
데이터베이스 Query 인터페이스를 제공
Default Manager로서 ModelCls.objects 가 제공
ModelCls.objects.all()
ModelCls.objects.all().order_by('-id')[:10]
ModelCls.obejcts.create(title="New Title")
RDBMS에서의 관계
- 1:N 관계 ->
models.ForeignKey
표현
- 1:1 관계 ->
models.OneToOneField
표현
- M:N 관계 ->
models.ManyToManyField
표현
Migrations
모델의 변경내역을 "데이터베이스 스키마"로 반영시키는 효율적인 방법을 제공하는 명령어
- 마이그레이션 파일 생성
> python manage.py makemigrations <appname>
- 지정 데이터베이스에 마이그레이션 적용
> python manage.py migrate <appname>
- 마이그레이션 적용 현황 출력
> python manage.py showmigrations <appname>
- 지정 마이그레이션의 SQL 내역 출력
> python manage.py sqlmigrate <appname> <migration-name>
장고에서는 테이블의 기본키로서 id (AutoField) 필드를 default로 생성한다. 다른 필드를 기본키로 지정하고싶다면 primary_key=True 옵션 적용.
View
- 1개의 HTTP 요청에 대해 1개의 뷰가 호출
- urls.py/urlpatterns 리스트에 매핑된 호출 가능한 객체
- 웹 클라이언트로부터의 HTTP 요청을 처리
- 장고에서는 크게 2가지 형태의 뷰를 지원
1. 함수 기반 뷰 (FBV): 장고 뷰의 기본
- 클래스 기반 뷰 (CBV): 클래스.as_view()를 통해 호출가능한 객체를 생성/리턴
View 호출 시 인자값
- HttpRequest 객체: 현재 요청에 대한 모든 내역을 담고 있음.
- 현재 요청의 URL로부터 Capture된 문자열들
View 호출 시 리턴값
- HttpResponse 객체를 반드시 리턴해야함.
- 파일like객체 혹은 str/bytes 타입의 응답 지원
- 파일 like 객체
Class 기반 뷰를 만들었을 때 장점
- 멤버 함수를 쪼개서 객체의 기능을 추가할 수 있다.
- 상속과 overloading을 사용할 수 있다.