Django web framework를 활용한 application 개발에 핵심이되는 URLconf, View, Model 중에 Model을 작성하고 ORM을 통해서 Database에 table을 만들고 데이터를 생성, 조회, 수정, 삭제하는 방법을 정리해보았다.
전체적인 장고의 흐름
Django는 가상환경에서 작업하는 것이 좋다.
가상환경명을 프로젝트명으로 만든 후 새로운 django project 생성하기
(장고프로젝트는 어떠한 디렉토리에 넣어도 무관함)
django-admin startproject westarbucks
<프로젝트이름>으로 들어와서 새로운 앱을 생성한다.(예시로 products라는 앱 생성)
cd westarbucks
python manage.py startapp products
다른 터미널 창에서 Database를 생성해준다.
$ mysql.server start
$ mysql -u root -p
mysql> create database "NAME" character set utf8mb4 collate utf8mb4_general_ci;
"NAME"안에 데이터베이스 이름
IP허용하기 ALLOWED_HOSTS = ['*']
INSTALLED_APPS/MIDDLEWARE에서 주석 처리하기 admin, csrf, auth
생성한 앱이 있다면 INSTALLED_APPS에 추가하기 'products'
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DATABASE 명',
'USER': 'root',
'PASSWORD': 'DB접속용 비밀번호',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
생성한 앱의 models.py에 가서 class코드 입력
# 예시
from django.db import models
class Menu(models.Model):
name = models.CharField(max_length=20)
class Meta:
db_table = "menu"
class Category(models.Model):
name = models.CharField(max_length=20)
menu = models.ForeignKey('Menu', on_delete=models.CASCADE)
class Meta:
db_table = "category"
class Drink(models.Model):
name = models.CharField(max_length=50)
category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True)
allergy_drink = models.ManyToManyField("Allergy", through = "AllergyDrink")
class Meta:
db_table = "drinks"
class Image(models.Model):
image_url = models.URLField(max_length = 2000)
drink = models.ForeignKey('Drink', on_delete=models.CASCADE))
class Meta:
db_table = "image"
뭔지 정리하기
on_delete=models.CASCADE
on_delete=models.SET_NULL, null=True
models.py입력이 끝나면 manage.py가 있는 디렉토리로 와서
$ python managy.py makemigrations
$ python managy.py migrate
입력하기
(models.py가 수정될때마다 입력해야한다.)
아까 mysql 데이터베이스 생성했던 터미널창으로 와서
$ mysql.server start
입력하기
$ mysql -u root -p
mysql> show databases;
mysql> use westarbucks;
use 데이터베이스 이름 입력
mysql> show tables;
생성된 table목록 보기
mysql> select * from menu;
mysql> select * from category;
mysql> select * from <생성된 table이름>;
manage.py가 있는 디렉토리로 가서 python manage.py shell 입력 후
데이터 입력하기
(models.py에 작성했던 class 꼭 import해주기!)
from products.models import Menu, Category, Drink
menu = Menu.objects.create.(name="")
queryset API
데이터 입력후 mysql에서 select * from 통해 확인하기