Django 실습 #1

Django web framework를 활용하여 어플리케이션 개발에 핵심이 되는 URL conf, View, Model 중에 Model을 작성하고 ORM을 통해서 데이터베이스에 테이블을 만들고 데이터를 생성, 조회, 수정, 삭제하는 방법을 실습해보자.

1. 먼저 가상환경을 만든다!

가상환경을 사용하는 이유는 여러 프로젝트를 하는데 있어서 분리된 버전 및 패키지 설치 환경을 가질 수 있기 때문이다.

파이썬의 대표적인 가상환경 프로그램으로는 conda와 virtualenv가 있는데 conda를 사용하여 실습을 진행하였다.

-- conda 가상환경 만들기 --

❯ conda create -n 'starbucks17' python=3.9

만들어준 가상환경에서 프로젝트를 만들기 위해서는 우선 그 가상환경으로 들어가 주어야 한다.

-- 내가 만든 가상환경으로 활성화하기 --

❯ conda activate starbucks17
  • 실행된 가상환경을 비활성화 하기
❯ conda deactivate
  • 가상환경 삭제하기
❯ conda env remove -n "가상환경이름"

2. 프로젝트에 필요한 파이썬 패키지 설치하기

django 설치

❯ pip install django

mysqlclient 설치

❯ pip install mysqlclient

pip freeze 명령어를 사용하면 설치 내역을 확인할 수 있다.

3. project & application 생성

✔️ 최상위 프로젝트 디렉토리를 만들어주자

❯ mkdir starbucks

✔️ 그리고 만들어준 프로젝트 디렉토리로 진입하여

❯ cd starbucks

✔️ Django project를 생성한다.

❯ django-admin startproject starbucks .

✔️ manage.py가 위치해 있는 메인위치에서 어플리케이션을 만든다.

❯ python manage.py startapp products

만들어진 어플리케이션은 다음 setting.py설정 단계에서 INSTALLED_APPS에 추가할 것이다.

.
├── manage.py
├── products
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
└── starbucks
    ├── __init__.py
    ├── __pycache__
    │   ├── __init__.cpython-39.pyc
    │   └── settings.cpython-39.pyc
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

이 과정까지 진행하게 되면 위와 같은 구조로 파일이 생성된 것을 확인할 수 있다.

4. Database 생성

✔️ 새 터미널 창을 띄워서 mysql에 접속한다.

mysql : 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)

❯ mysql -u root -p

설정한 비밀번호를 입력하면 mysql>으로 바뀐다.

✔️ 실습에 사용할 데이터베이스를 만들어 준다.

mysql> create database starbucks character set utf8mb4 collate utf8mb4_general_ci;

create database 데이터베이스 이름

  • character set utf8mb4 collate utf8mb4_general_ci;를 입력해주는 이유는 문자가 깨져버리는 현상을 방지하기 위함이다.

✔️ 아래와 같이 입력하면 데이터베이스가 잘 생성되었음을 확인할 수 있다.

mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| starbucks          |
| sys                |
+--------------------+

5. settings.py 설정

IP 허용

ALLOWED_HOSTS = ['*']

사용하지 않는 요소 주석 처리

사용하지 않는 요소 admin, csrf, auth 등을 주석 처리 해준다.

위에서 생성한 products 어플리케이션도 추가해 주었다.

MySQL 데이터베이스와 연동

DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DATABASE 명',
        'USER': 'root',
        'PASSWORD': 'DB접속용 비밀번호',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

settings.py에 위의 내용을 입력하여 mysql과 연동시켜준다.

추가로 urls.py를 아래와 같이 수정해준다.

from django.urls import path
urlpatterns = [
]

6. M(models.py) 작성

from django.db import models


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 Product(models.Model):
	name  = models.CharField(max_length=100)
	price = models.IntegerField()
	menu = models.ForeignKey('Category', on_delete=models.CASCADE)

✔️ 한 클래스는 데이터베이스 한 테이블을 의미한다.

✔️ 또 클래스 속성 하나가 테이블의 한 column을 나타낸다. 따라서 테이블 column을 늘리기 위해서는 models.py에 속성을 추가하면 된다.

🔆 각 클래스에 아래의 코드를 추가함으로서 테이블 이름을 지정할 수도 있다.

class Meta:
	db_table = '테이블명'

7. migration

models.py에 정의된 모델의 생성/변경 내역을 히스토리 관리 또는 데이터베이스에 적용을 위한 목적으로 migrate, makemigration 명령어를 실행하게 된다.

주의할 점은 메인위치에서 명령어를 사용할 것!

✔️ python manage.py makemigration <app-name> : 변경사항에 대한 마이그레이션 파일 생성

✔️ python manage.py migrate <app-name> : 마이그레이션 적용. 변경사항을 데이터베이스에 적용한다.

만약 마이그레이션 적용이 잘 되었는지 확인하고 싶다면 python manage.py showmigrations <app-name> 명령어를 사용하면 된다.

8. 데이터베이스 적용 확인

mysql로 위에서 데이터베이스가 잘 생성되었는지 확인할 차례이다.

mysql -u root -p 명령어로 mysql에 접속하고

use <데이터베이스 이름>을 통해 원하는 데이터베이스로 들어간 뒤

✔️ show tables; 명령어를 사용하여 확인할 수 있다.

mysql> show tables;
+---------------------+
| Tables_in_starbucks |
+---------------------+
| django_content_type |
| django_migrations   |
| django_session      |
| products_category   |
| products_menu       |
| products_product    |
+---------------------+
6 rows in set (0.00 sec)

✔️ models.py에 만든 클래스 세가지(category, menu, product) 그대로 테이블로 생성된 것을 볼 수 있다.

좋은 웹페이지 즐겨찾기