[Django] Model 건드려보기

그냥·2022년 6월 4일
0

django

목록 보기
2/20

1. Model이란?

1) Django Workflow

Django를 통한 Web Workflow의 단계는 아래와 같다.

1) Client(Front-end)에서 Server에 Request를 보낸다.
2) URL_conf(urls.py)에서 Request를 보낸 url을 파싱하여 해석한 요청에 맞춰 View 내 함수에 라우팅을 해준다.
3) View에 있는 함수에서 Model에 데이터 CRUD를 요청한다.
4) Model에서 ORM을 통하여 Database에서 View에서 보낸 CRUD 요청을 실행한다.
5) CRUD에 대한 결과를 Client에 Response로 보낸다.


오늘은 여기서 ERD를 짜고 데이터를 만들고 호출하는 Model에 대해서 알아보고자 한다.


2)ORM

  • 정의: ORM이란 Object Relational Mapping의 준말로 Object(객체)와 Database의 데이터를 자동으로 Mapping(연결)해주는 것이다.
  • 사용이유: 장고는 객체지향프로그래밍 언어인 Python 기반의 프레임워크다. 장고에서 장고와 이질적인 형태의 MySQL과 같은 Database에 CRUD 작업을 하기 위해서는 ORM이 필요하다. 즉, 장고 내에서 파이썬 언어로 DB CRUD를 할 수 있게 해주는 '통역사'와 같은 것이다.



2. Model 작성하기

앞서 장고 프로젝트를 만들고 startapp 명령어를 통해서 app을 만들었어야 Model 작업이 가능하다.

1) models.py 작성하기

  • models.py에 Model Class 작성을 통해 DB의 table과 mapping
  • models.py의 위치
├── manage.py
├── app_name
│   ├── models.py : Model class 작성 --> database table과 mapping
│   ├── urls.py
│   └── views.py
└── project_name
└── urls.py

  • models.py 작성
    ERD를 짜는 작업으로 class를 통해서 테이블을 만들고, class 안에 컬럼으로 만들 변수를 선언한다.
from django.db import models

class Menu(models.Model):
    name = models.CharField(max_length=20)

    class Meta:
        db_table = 'menus'

class Category(models.Model):
    name = models.CharField(max_length=20)
    menu = models.ForeignKey('Menu', on_delete=models.CASCADE)

    class Meta:
        db_table = 'categories'

class Product(models.Model):
    name     = models.CharField(max_length=100)
    category = models.ForeignKey('Category', on_delete=models.CASCADE)

    class Meta:
        db_table = 'products'

2) models.py 작성 내용 DB에 적용하기

  • makemigrations: models.py에 작성한 파이썬 코드를 DB에 적용하기 위한 migration 파일을 만드는 과정
python manage.py makemigrations <앱이름>

#0001_initial.py

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
    
    migrations.CreateModel(
            name='Menu',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=45)),
            ],
            options={
                'db_table': 'menu',
            },
        ),
        
        ....

"python manage.py makemigrations <앱이름>" 명령어를 실행하면 위와 같이 "0001_initial.py"파일이 만들어진다. 그 안에 DB로 만들어질 파이썬 코드가 작성되어 있다.


  • migrate: migrate 파일을 database에 적용
python manage.py migrate

0개의 댓글

관련 채용 정보