Django의 장점
왜 장고를 써야할까 ?
- Python 생태계
- 활발한 커뮤니티
- 풀스택 프레임워크
-> 백엔드 개발에 필요한 거의 모든 것을 Django에서 직접 지원
장고는 MTV 프레임워크다. MVC와 같은 패턴이지만 이름만 다르다.
- Model -> Django Model
- 데이터 SQL 쿼리를 생성/수행
- View -> Django Template
- Controller -> Django View
- HTTP 클라이언트로부터 요청을 처리하는 함수.
프론트엔드는 React와 TS를 주로 쓴다. -> 관리하기 편하다.
장고의 주요 기능들 (1)
- Function Based Views: 함수로 HTTP 요청 처리
- Models: 데이터베이스와 인터페이스
- Templates: MVC Framework에서 View와 비슷한 역할을 함. 템플릿 (Template)은 View로부터 전달된 데이터를 템플릿에 적용하여 Dynamic 한 웹페이지를 만드는데 사용됨.
- Admin: 심플한 데이터베이스 레코드 관리 UI
- Logging: 다양한 경로로 메세지 로깅
- Static files: 개발 목적으로의 정적인 파일 관리
- Messages framework: 유저에게 알리기 위한 1회성 메세지 노출
장고의 주요 기능들 (2)
- Class Based Views: 클래스로 함수 기반 뷰 만들기
- Forms: 입력폼을 생성하고 입력값이 유효한지 유효성 검사와 DB에 저장
- 테스팅
- Internationalization and localization
- Caching
- Geographic: DB의 Geo 기능 활용 (PostgreSQL 중심)
- Sending emails
- Syndication Feeds (RSS/Atom)
- Sitemaps


장고 앱
재사용성을 목적으로한 Python Package
재사용성을 목적으로 둔 것이 아니라면, 하나의 장고 앱에서 현재 프로젝트의 거의 모든 기능을 구현해도 무방하다. 앱 = 하나의 작은 서비스.
하나의 앱 이름은 현재 프로젝트 상에서 유일해야한다.
새롭게 생성한 장고앱이나 외부 라이브러리 형태의 장고앱은 반드시 settings.INSTALLED_APPS에 등록을 시켜줘야한다.
장고 모델
1. 애플리케이션의 다양한 데이터 저장방법
- 데이터베이스: RDBMS, NoSQL 등
- 파일: 로컬, 외부 정적 스토리지
- 캐시서버: memcached, redis 등
2. 데이터베이스와 SQL
데이터베이스의 종류는 크게 RDBMS, NoSQL이 있다.
- RDBMS(관계형 데이터베이스 관리 시스템): PostgreSQL, MySQL, SQLite등
- NoSQL: MongoDB, Cassandra 등
장고 ORM인 모델은 RDB만을 지원한다.
3. Django Model
- 장고 내장 ORM
- 데이터베이스 테이블과 파이썬 클래스를 1:1로 매핑
- 모델 클래스명은 단수형으로 지정 ex) Posts (X), Post (O)
- 클래스이기 때문에 첫글자는 대문자로.
- 매핑되는 모델 클래스는 DB 테이블 필드 내역이 일치해야 함.
- 장고 모델을 통해 데이터베이스 형상을 관리할 경우
1. 모델 클래스 작성
- 모델 클래스로부터 migration 파일 생성 ->
makemigration
명령
- 마이그레이션 파일을 데이터베이스에 적용 ->
migrate
명령
- 모델 활용
- 장고 외부에서, 데이터베이스 형상을 관리할 경우
1. 데이터베이스로부터 모델 클래스 소스 생성 -> inspectdb
명령
- 모델 활용
from django.db import models
class Post(models.Model):
message = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
4. 장고 모델필드 (1)
- Primary Key:
AutoField, BigAutoField
- String:
CharField, TextField, SlugField
- Date/Time:
DateField, TimeField, DateTimeField, DurationField
- T/F:
BooleanField, NullBooleanField
- Numeric:
IntegerField, SmallIntegerField, PositiveIntegerField, PositiveSmallIntegerfield, BigIntegerField, DecimalField, FloatField
- File:
BinaryField, FileField, ImageField, FilePathField
5. 장고 모델필드 (2)
- 이메일:
EmailField
- URL:
URLField
- UUID:
UUIDField
- IP:
GenericIPAddressField