C.R.U.D with Django 1 [Wecode][210818]

Jungsoo kim·2021년 8월 19일
0

wecode

목록 보기
13/30

이전 글에서 Project 진행 전 Django & Git 셋팅에 대해 알아보았기 때문에, 이번에는 기본적인 Django의 Workflow와 CRUD (Create, Read, Update, Delete)에 대해서 알아보려고 한다.

<목차>
1. Django란?
2. Django Workflow
3. Data CRUD [ORM]
4. CRUD 실습

1. Django란?

Django는 한 마디로 정리해서 Python언어 기반 Web Framework이다.
특징으로는 M.V.T 방식으로 개발하는 프레임워크인데, 여기서 M.V.T는 각각 Model, View, Template이다.

Model: 데이터베이스의 테이블을 의미 함
View: Request를 받아 Response하는 과정(로직 처리)
Template: 사용자가 보게 될 화면의 모습

덧붙여, Framework와 Library에 대한 차이도 짚고 넘어가는 것이 좋을 것 같다.
Framework와 Library는 모두 프로그래밍을 하는 데 있어 자주 사용되는 기능들(모듈, 패키지 등)을 내장하고 있는 프로그램이라고 보면 된다.

  두 가지 모두 프로그래밍을 하는 데 있어 많은 도움을 주고 프로그래밍이 쉽게 도와주지만 다소 차이가 존재하는데, Framework는 만들어져 있는 모듈, 패키지 등을 있는 그대로 사용해야하는 편이다. (Flexibleity가 떨어진다.) 반면에, Library는 내장되어 있는 개별 모듈, 패키지등을 필요할 때마다 일부만 꺼내와서 활용하는 것이 가능하다.

어느것이 더 좋다 나쁘다 말하기는 힘들고 상황에 맞춰서 그때 그때 필요한 것을 사용하면 될 것 같다.

2. Django Workflow

  Django의 Workflow는 아래의 그림과 같다.

위의 그림과 같이, Request & Response 과정에 여러 단계가 포함되어 있는데, 대략적으로 설명하자면 아래와 같다.

  Client에서 요청이 들어오면 Django의 프로젝트 기본 모듈인 urls.py를 거쳐 URL 정보를 또 다른 기본 모듈인 views.py 전달하게 된다. view.py에서는 작성되어 있는 코드를 바탕으로 요청을 model.py를 통해 SQL Database와 상호작용 하게 된다. 마지막으로, 이 과정에서 도출된 값을 Client 쪽으로 Response하게 된다.

3. Data CRUD [ORM]

  데이터를 CRUD하기 전에 먼저 데이터를 저장할 Table을 만들어 줘야하는데, Django에서는 프로젝트의 application 설치 시 제공되는 models.py를 통해 만들 수 있다.
그 후에 QuerySet API(Django에서 기본으로 제공하는 API)가 제공하는 all, filter, exclude, values, get, create, values_list 등의 메서드를 활용하여 CRUD가 가능합니다.

Create

Class.objects.create(“Table column 이름”=“넣어줄 값”)

Read

Class.objects.get(id=“id 넘버”)
Class.objects.get(“Table column 이름”=“넣어줄 값”)
Class.objects.filter(“Table column 이름”=“넣어줄 값”)

Update

Class.objects.filter(id=“”)

Class.objects.filter(id=“”).update(“Table column 이름”=“넣어줄 값”)
*속성 가져오기 —> Class.objects.get(id=“id 넘버”).name

Delete

Class.objects.filter(id=“id 넘버”)
Class.objects.filter(id=“id 넘버”).delete()

  덧붙여, ORM에 대해 간단히 설명하고 넘어가자면, ORM (Object-relational mapping)은 파이썬(언어)로 작성된 코드를 데이터 베이스를 컨트롤 할 수 있게 해주는 것이다. Django에서는 Shell을 통해 Database에 접근해서 CRUD가 가능하다.

4. CRUD 실습

  1. 먼저 models.py에서 입력하고자 하는 Data의 Table을 위한 Code를 작성한다.
from django.db import models

# Create your models here.

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)
    description = models.TextField()
    nutrition = models.ForeignKey('Nutrition', on_delete=models.CASCADE)

    class Meta:
        db_table = 'products'

class Image(models.Model):
    image_url = models.CharField(max_length=500)
    product = models.ForeignKey('Product', on_delete=models.CASCADE)

    class Meta:
        db_table = 'images'

class Nutrition(models.Model):
    one_serving_kca = models.FloatField()
    sodium_mg = models.FloatField()
    saturated_fat_g = models.FloatField()
    sugars_g = models.FloatField()
    protein_g = models.FloatField()
    caffeine_mg = models.FloatField()
    size_ml = models.CharField(max_length=20)
    size_fluid_ounce = models.CharField(max_length=20)

    class Meta:
        db_table = 'nutritions'

class Allergy(models.Model):
    name = models.CharField(max_length=20)
    bridge = models.ManyToManyField(Product, through='Allergy_product')

    class Meta:
        db_table = 'allergies'

class Allergy_product(models.Model):
    allergy = models.ForeignKey('Allergy', on_delete=models.CASCADE)
    product = models.ForeignKey('Product', on_delete=models.CASCADE)

    class Meta:
        db_table = 'allergy_products'
  1. 그 다음으로 models.py 작성 내용을 DB에 적용해야 한다.
  • makemigrations: models.py에 작성한 python code를 database에 적용하기 위한 migration 파일(설계도)를 만드는 과정
python manage.py makemigrations app이름
  • python manage.py makemigrations app이름
python manage.py migrate
  1. Django Shell을 실행하여 위에서 언급한 메서드를 사용하여 데이터를 CRUD 한다.

Django Shell을 실행하는 방법은 아래와 같다.

# 터미널에서 manage.py가 있는 위치에서 아래의 명령어 실행
$ python manage.py shell

Shell을 통해 데이터를 CRUD하기에 앞서, Class를 먼저 import 해줘야 한다. 그 후에 아래 사진과 같이 create 명령어를 입력해 주면 두 번째 사진과 같이 새로운 데이터가 입력 되는 것을 확인할 수 있다.

데이터의 Read, Update, Delete하는 명령어 및 출력 결과는 아래와 같다.

Read

아래 사진과 같이, get, filter 메서드를 사용하여 데이터를 읽을 수 있다.
차이점은 get은 1개의 데이터만 출력 가능하며, object로 데이터를 출력한다.
filter의 경우, 여러개의 데이터를 동시에 출력 가능하지만 데이터가 QuerySet으로 출력한다.

따라서, get 메서드를 사용할 경우 데이터 항목에 대한 값을 직접적으로 출력할 수 있으나, filter 메서드를 사용할 경우, 데이터 항목에 대한 값을 직접 입력하였을 때 두 번째 사진과 같은 값이 출력되는 것을 확인할 수 있다.

Update & Delete

Update & Delete는 아래와 같은 코드를 입력해서 가능하며, 결과 값은 아래의 사진과 같다.
<shell>

<Mysql>

마무리...

  슬슬 공부하고 있는 내용들이 어려워지기 시작해서 쉽지 않아지는 것 같다. 절대적인 시간이 필요하다는 얘기를 많이 들었는데, 역시 경험자들이 공통적으로 하는 얘기는 대부분이 맞는 얘기인것 같다. 쉽지 않지만 실제 플랫폼을 만들어서 서비스 하는 그 날까지 열심히 해봐야지...

profile
어렵지만 꾸준히 차근차근 해 나가자~!

0개의 댓글