본문 바로가기

Python Web Framework/Django, Flask

Django_Model

반응형

1. Django_Model의 특징

- Django는 내장 ORM을 통해 sql문 작성 없이도 DB의 접근이 가능하다.

- Model은 DB와 연결되어있다.

- SQL문장 없이 장고 모델을 통해 DB의 CRUD가 가능하다 >> 모델 안의 Class가 DB의 테이블 역할

- DB는 myproject(base_dir)에 생성된다.

 

- 아래와 같이 상속을 받아야 Django의 ORM을 사용할 수 있다.

From django.db import models

Class Post(models.Model): #상속을 받아야 사용가능

 

2. Django_Model 생성

1> 모델에 class 생성 

blog/models.py

models.py

여기서 생성 된 class 1개가 테이블 1개를 의미한다

- 변수이름 = models. 변수 타입 지정

- def __str__ : str을 재 정의 하는 것 : 사용자가 원하는 방식으로 테이블을 볼 수 있게 하는 것

 

2> 모델 생성 

python manage.py makemigrations blog 

실제 실행 창 화면

DB에 반영할 준비를 하는 단계

 

 

3> 생성된 SQL 문장 확인 

python manage.py sqlmigrate blog

- blog뒤에 0001을 붙이면 특정 데이터 베이스를 지정해서 확인하는 것

안 해도 무관한 단계 : 자동으로 생성되는 sql문장을 확인

 

 

4> 데이터 베이스 생성

python manage.py migrate #처음에 한번은 꼭 실행해야함
python manage.py migrate blog #그 다음부터는 원하는 앱만 생성

- 첫 줄의 코드가 실행되어야 기본적으로 생성되야하는 파일이 생성된다(꼭 처음에 한 번은 실행시킨다)

 

 

5> 장고 안에 있는 shell 실행

python manage.py shell

Django shell

- 장고 shell을 이용하여 실제 DB안의 데이터를 확인해볼 수 있다.

 

 

6> DB Browser for SQLite

DB Browser for SQLite로 들어가서 새 데이터 베이스 열기

- myproject에 새로 생성된 db.sqlite3 파일을 불러온다.

SQLite3 화면

 

3. Django_Model 추가정보

# DB와 직접 커넥하는 곳

# DB를 저장하는 방법은 데이터베이스, 파일, 캐시서버 등이 있다.

# ORM 기법 : DB와 객체 지향 프로그래밍 언어간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법

 - 장고는 ORM을 내장하고 있기 때문에 자동으로 변환을 시켜준다.

# 장고가 제공하는 DB는 Mysql, oracle, Sqlite3등이 있다.

# Model 과 Form 둘다 ORM을 제공 : Form은 보통 html과 함꼐 쓰인다.

 

# 새로 생성한 테이블을 어드민에서도 관리하려면 blog/admin.py에 추가해줘야한다.

admin.py

 - 위 이미지에서 알 수 있는 것은 Post, Musician, Album이라는 테이블을 추가 해준 것

 

# DB에 적용 가능한 다양한 타입들

FieldTest Table생성

# 날짜 관련 데이터 타입 입력 시 주의사항

fDateField = models.DateField(auto_now=False, default=datetime.date.today)

fDateTimeField = models.DateTimeField(auto_now=False, auto_now_add=False)

 - auto_now = True : 저장할 때 마다 현재 날짜로 수정된다. >> update

 - auto_now = False : 현재 날짜로 한번만 저장되고 변경은 불가능

 - auto_now_add = True : 현재일자로 1회만 들어간다. >> create

 - auto_now_add = False : 선택된 일자로 1회만 들어간다

 >>false로 지정하면 우리가 선택할 수 있는 UI가 어드민상에 생성된다. true로 지정하면 선택할 수 있는 공간이 없다.

 

# NULL & BLANK 관련 정보

 - Null : DB와 관련해서 NULL값의 여부를 지정

 - Blank : 유효성과 관련(사용자의 입장), 폼 유효성 검사에 사용된다 >> 사용자에게 빈칸을 허용할 지 말지에 관련.

 

 

4. Django_Model 1:N과 M:N

1> Foreign Key(to, on_delete)

 - 1 : N 의 관계

 - to : 대상 모델을 입력한다 (1의 역할)

 - on_delete : cascade가 default 값이다

models.py

>> 정리하자면 1: N의 관계를 사용하고자 할 때는 Foreign Key를 사용한다 (이때 1을 인자로 넣어준다)

>> 여기서 1은 Reporter이고, N은 Artilcle이다.

 

 

2> ManyToManyField

 - M : N 의 관계

 - 이때는 중간 테이블이 자동으로 생성된다. (테이블이 M:N의 관계일 경우만)

중간 테이블 생성

- 아래의 이미지에서 Article이 Publication을 참조하기 때문에 Publication을 먼저 정의해야한다.

- 또한 Article이 Reporter를 참조하기 때문에 Reporter를 먼저 정의해야한다.

 

M:N의 관계, 1:N의 관계

>> 중요한 사실은 다른 테이블을 참조하고자 한다면, 참조할 테이블이 사용할 테이블보다 위에 정의되어있어야 한다.

 

5. CUSTOMIZING DB FOR ADMIN

1> 로직을 추가해서 어드민에 등록 할 경우

admin.py

- 추가하고 싶은 로직을 수행하는 class 생성

- admin.site.resister(테이블이름, 수행할 로직의 클래스)

어드민 실행 화면

 

2> 사용자가 원하는 칼럼을 추가

 - 기능을 새롭게 만들어서 추가 할 수 있다.

admin.py

customizing admin

- 기존에 생성한 class에 새롭게 추가 할 기능에대한 def 를 생성한다.

- 새롭게 함수를 추가하고 볼 수 있는 admin 환경

실제 어드민 환경 창

 

반응형

'Python Web Framework > Django, Flask' 카테고리의 다른 글

[Django] Trouble Shooting  (0) 2020.01.24
[Nginx + Gunicorn + Django] API 서버 구축  (0) 2020.01.20
Django_Admin  (0) 2019.04.08
Django_project 시작하기  (0) 2019.04.07
Django_NewApp_FullProcess  (0) 2019.04.07