Django로 웹 개발하기 - 2. Django의 개발 방식 및 모델링
이 글은 fast_campus의 파이썬 웹 개발 수업을 듣고 정리, 추가한 내용으로 Django로 웹 개발을 할때 알아야 할 기본적인 내용과 모델링 하는 과정을 살펴보겠다.
※ 참고 : 코딩 컨벤션(Coding Convention)
- 코드를 작성할때 사용되는 일정한 기준
-
PEP 8 - 파이썬 코드를 위한 가이드 라인
-
flake 8 - 파이썬 코드의 스타일을 검사해주는 도구
$pip3 install flake8- 사용법:
\$flake8 hello.py
Django의 개발방식(MTV 패턴)
model, template, view
- model : 데이터베이스에 저장되는 데이터
- template : 사용자(user)에게 보여지는 부분 (html)
- view : 실질적으로 프로그램 로직이 동작하여 템프릿에 전달
1. 모델링 설계 하는 방법
- 어떤 필드가 필요한지 생각한다
- 생각이 되면 적어본다.
- 각 필드는 어떤 타입이 되어야 하는지 생각 혹은 논의한다.
2. 모델링 설계 해보기 1
-
주문(Order) 모델링
- 주문번호 - pk
- 고객-고객번호 relation - pk
- 총 금액 - IntegerField
- 주문 상태 - choice
-
포스트(Post) 모델링
- 글 번호 - pk
- 유저-글쓴이 번호 relation - pk
- 글 내용 - TextField
- 글 쓴 날짜 - DateTimeField
- 글 수정한 날짜 - DateTimeField
2. 모델링 필수 개념
▶ key
-
Primary key(기본키, pk)
테이블에 저장된 각각의 데이터를 유일하게 구분하는 키.
바꾸어 말하면, 데이터베이스(DB) 테이블에 각 행의 식별 기준인 기본키가 필요하다.
Django 에는 기본키로 id가 디폴트로 지정되어있다.
id = models.AutoField(primary_key=True) + 얘를 pk로 지정하겠다. -
Foreign key(외래키)
각 테이블간에 연결하기 위해서 특정 테이블에서 다른 테이블의 참조되는 기본키를 외래키라고 한다.
Users : id, user_name, phonenumber
Products: id, _product_name, productprice
Orders: id, _product_name, user_name, total_price, status- 각 테이블의 id는 pk, Orders의 product_name, user_name은 Foreign key
▶ Django Field types
- CharField : 작은 문자열 또는 큰 문자열을 위한 스트링(문자열) 필드.
- TextField : 큰 문자열 필드.
- IntegerField : 정수 필드
- FloatField : 실수 필드
- BooleanField : True / False 필드.
- DateTimeField : 날짜와 시간을 가지는 필드
- FileField : 파일 업로드 필드.
- EmailField : EmailValidator를 사용해서 값이 유효한 email인지 체크하는 CharField.
- ImageField
- DecimalField
- AutoField
- DateField
- class DateField(auto_now=False, auto_now_add=False, **option)
- auto*now_add : 데이터가 *처음_ 생성되어 저장할 때
- auto_now : 데이터가 저장될때(update)
3. 모델링 설계 해보기 2
-
포스트(Post) 모델링 다시 해보기
- 글 번호 - pk
- 유저-글쓴이 번호 relation - pk
- 글 제목 - CharField(max_length=30)
- 글 내용 - TextField
- 글 쓴 날짜 - DateTimeField(auto_now_add=True)
- 글 수정한 날짜 - DateTimeField(auto_add=True, Null=True)
-
Quiz) 댓글 Model 만들기
- user_image ImageField
- user_name CharField(max_length=30, Null=True)
- email CharField(max_length=50,Null=True)
- content TextField(max_length=200, Null=False)
class Comment(models.Model):
user_name = models.CharField(max_length=30, Null=True)
email = models.CharField(max_length=50,Null=True)
content = models.TextField(max_length=200, Null=False)
- Model Relationship
- Many-to-Many
- Many-to-One (One-to-Many)
- One-to-One
위와 같은 방식으로 user, post, product, order 등을 모델링 할 수 있다.
Leave a comment