conda create -n westar_work python = 3.8 # miniconda 가상환경 생성 (가상환경 이름: westar_work)
conda activate westar_work # 가상환경 active
# 프로젝트에 필요한 python package 설치
pip install django # django 설치
pip install mysqlclient # MySQL 설치
westar_work
라는 가상환경 내에 Django 및 MySQL이 잘 설치된 것을 확인할 수 있다.
django-admin startproject westarbucks # `westarbucks`라는 project 생성
cd westarbucks
python3 manage.py startapp practice # `westarbucks` 프로젝트 내 `practice`라는 앱(app) 생성
mysql.server start # MySQL 서버 스타트
mysql -u root -p # MySQL 실행
# "westar"(database명) 라는 데이터베이스 생성
mysql> create database westar character set utf8mb4 collate utf8mb4_general_ci;
# 경로: westarbucks/westarbucks/settings.py
ALLOWED_HOSTS = ['*'] # IP 허용
#사용하지 않는 요소 주석처리
INSTALLED_APPS = [
# 'django.contrib.admin', # 주석처리
# 'django.contrib.auth', # 주석처리
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'practice', # App 이름 추가
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware', # 주석처리
# 'django.contrib.auth.middleware.AuthenticationMiddleware', # 주석처리
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# 경로: westarbucks/westarbucks/urls.py
from django.urls import path
urlpatterns = [ # 내용삭제
]
# 경로: westarbucks/westarbucks/settings.py
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DATABASE 명', # 처음에 MySQL에서 지정한 이름
'USER': 'root',
'PASSWORD': 'DB접속용 비밀번호',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
만들고자 하는 데이터 테이블에 대해 models.py 작성
# 경로: westarbucks/practice/models.py
# 필요한 테이블 : 7개 (menu, categories, drinks, images, allergy, allergy_drink, nutritions)
class Menu(models.Model):
name = models.CharField(max_length=20)
class Category(models.Model):
name = models.CharField(max_length=20)
menu = models.ForeignKey('Menu', on_delete=models.CASCADE)
class Drink(models.Model):
K_name = models.CharField(max_length=100)
E_name = models.CharField(max_length=100)
description = models.TextField()
category = models.ForeignKey('Category', on_delete=models.CASCADE)
class Image(models.Model):
url = models.URLField()
drink = models.ForeignKey('Drink', on_delete=models.CASCADE)
class Allergy(models.Model):
name = models.CharField(max_length=20)
class Allergy_Drink(models.Model):
allergy = models.ForeignKey('Allergy', on_delete=models.CASCADE)
drink = models.ForeignKey('Drink', on_delete=models.CASCADE)
class Nutritions(models.Model):
calories = models.DecimalField(max_digits = 5, decimal_places = 1)
sodium = models.DecimalField(max_digits = 5, decimal_places = 1)
saturated_fat = models.DecimalField(max_digits = 5, decimal_places = 1)
sugars = models.DecimalField(max_digits = 5, decimal_places = 1)
protein = models.DecimalField(max_digits = 5, decimal_places = 1)
caffeine = models.DecimalField(max_digits = 5, decimal_places = 1)
size_ml = models.IntegerField()
size_oz = models.IntegerField()
drink = models.ForeignKey('Drink', on_delete=models.CASCADE)
# 경로: westarbucks
python3 manage.py makemigrations practice # migration practice 생성
python3 manage.py migrate practice # migration 실행
python3 manage.py shell
# models.py 에서 만든 class 가져오기
from practice.models import Menu, Category, Drink, Image, Allergy, Allergy_Drink, Nutritions
# Menu 테이블 생성
# class Menu(models.Model):
# name = models.CharField(max_length=20)
# 메뉴는 값으로 이름만 갖기 때문에 아래와 같이 데이터 추가
Menu.objects.create(name = "음료") # Menu에 음료 항목 생성(create)
MySQL에서 select * from practice_menu;
를 치면 아래와 같이 생성된 menu 테이블을 불러올 수 있다.
# Category 테이블 만들기
>>> a1 = Category(name="콜드브루 커피", menu_id=1)
>>> a2 = Category(name="브루드 커피", menu_id=1)
>>> a3 = Category(name="에스프레소", menu_id=1)
>>> Category.objects.bulk_create([a1, a2, a3])
mysql> select * from practice_category;
이렇게 만든 전체 테이블은 다음과 같다
Drink
Allergy
Image
Nutritions
Allergy_Drink
ref.
models.py
에 입력한 테이블 정보를 MySQL에서 보고싶다면
mysql> desc practice_nutritions; # 테이블 정보 보기
정리 너무 잘해주셔서 도움 너무 많이 됐습니다 :)