๐Ÿ“’ [ TIL ] 2022.05.27_29์ผ์ฐจ # Django ๊ฐ•์˜ํ•™์Šต(2)

๋ฌธ๋ช…์ฃผยท2022๋…„ 5์›” 27์ผ
0
post-thumbnail

[ 2022-05-27 (๊ธˆ) ์˜ค๋Š˜์˜ TIL ]

[ Today Learn ]

  • Django์—์„œ ์ œ๊ณตํ•˜๋Š” ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ๋ฐ ํ™•์žฅ
  • ํฌ์ŠคํŠธ ์ฝ๊ธฐ / ์“ฐ๊ธฐ / ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ๊ฐœ๋ฐœ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๊ด€๊ณ„ํŒŒ์•… ๋ฐ ORM ๋ชจ๋ธ์„ ์ˆ˜์ •
  • ํŒ”๋กœ์ž‰ / ํŒ”๋กœ์šฐ ๋ชจ๋ธ ๊ธฐ๋Šฅ๊ฐœ๋ฐœ

โœ๏ธ ๋‚ด๊ฐ€ ๋ฐฐ์šด๊ฒƒ, ์–ป์€๊ฒƒ

* ํด๋ž˜์Šค์˜ ์ƒ์†

โ“ ํด๋ž˜์Šค์˜ ์ƒ์†์ด๋ž€?
๋ถ€๋ชจ์˜ ๊ฒƒ์„ ์ž์‹์—๊ฒŒ ๋ฌผ๋ ค์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ถ€๋ชจ ํด๋ž˜์Šค(์ƒ์œ„ ํด๋ž˜์Šค)์™€ ์ž์‹ ํด๋ž˜์Šค(ํ•˜์œ„ ํด๋ž˜์Šค)๊ฐ€ ์กด์žฌํ• ๋•Œ ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์„ ํƒํ•ด์„œ ๊ทธ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ทธ๋Œ€๋กœ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด class A์™€ class B๊ฐ€ ์žˆ์„๋•Œ ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ํด๋ž˜์Šค๋Š” ์„œ๋กœ์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.

class A:
	def ๊ธฐ๋Šฅ_A_1:
		return '๊ธฐ๋Šฅ_A_1'
	def ๊ธฐ๋Šฅ_A_2:
		return '๊ธฐ๋Šฅ_A_2'

class B:
	def ๊ธฐ๋Šฅ_B_1:
		return '๊ธฐ๋Šฅ_B_1'

ํ•˜์ง€๋งŒ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด Bํด๋ž˜์Šค๊ฐ€ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„ ๋“ฏ ๋ณด์ด๋Š”๋ฐ, ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด class B์—์„œ class A์˜ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉ ํ•  ์ˆ˜์žˆ๋‹ค

class B(A):
	def ๊ธฐ๋Šฅ_B_1:
		return '๊ธฐ๋Šฅ_B_1'

๐Ÿงฉ ์ ์šฉ ์˜ˆ์‹œ

# user/models.py
from django.db import models

# ํšŒ์›๊ฐ€์ž…์—์„œ ์ €์žฅ๋˜๋Š” class
# Create your models here.
class UserModel(models.Model):

    class Meta:
        db_table = "my_user" # ์—ฌ๊ธฐ๋Š” ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด์—์š”! ๊ผญ ๊ธฐ์–ต ํ•ด ์ฃผ์„ธ์š”!

    username = models.CharField(max_length=20, null=False)
    password = models.CharField(max_length=256, null=False)
    bio = models.CharField(max_length=256, default='')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

์œ„์—์„œ ์ง์ ‘ ์ž‘์„ฑํ•œ ๊ธฐ๋Šฅ๋“ค์€ Django์—์„œ ์ œ๊ณตํ•˜๊ณ ์žˆ๋‹ค. models.Model ์ž๋ฆฌ์— 'AbstractUser'๋ฅผ ์‚ฌ์šฉ ํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๊พธ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

โ“ AbstractUser ๋ž€?
django์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋กœ๊ทธ์ธ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ User Model์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค. ์ด ์™ธ์—๋„ django์—๋Š” flask์™€ ๋‹ฌ๋ฆฌ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์ด ์žˆ๋‹ค.

from django.db import models
from django.contrib.auth.models import AbstractUser


# Create your models here.
class UserModel(AbstractUser):

    class Meta:
        db_table = "my_user" # ์—ฌ๊ธฐ๋Š” ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด์—์š”! ๊ผญ ๊ธฐ์–ต ํ•ด ์ฃผ์„ธ์š”!

    bio = models.TextField(max_length=500, blank=True)

* ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ด€๊ณ„

๐Ÿงฉ ์ ์šฉ ์˜ˆ์‹œ

1) one-to-many

ex) ํ•œ ๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ธ€์„ ์“ฐ๊ฑฐ๋‚˜ ํ•˜๋‚˜์˜ ๊ธ€์“ด์ด๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ธ€์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์Œ 

2) one-to-one
๋ฐ์ดํ„ฐ 'A'์™€ '๋ฐ์ดํ„ฐ B'๊ฐ€ ์„œ๋กœ ๋งŒ๋‚˜์„œ ์ค‘๋ณต์ด ๋˜์ง€ ์•Š๋Š” ๊ฐ’์„ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒƒ

ex) Profile์€ ํ•œ ์‚ฌ์šฉ์ž ๋‹น ํ•˜๋‚˜๋งŒ ์กด์žฌํ•จ

3) many-to-many
์„œ๋กœ์˜ ํ…Œ์ด๋ธ”์—์„œ' ์„œ๋กœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.

ex) 'ํ”ผ์ž' ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ† ํ•‘์„/'ํ† ํ•‘'์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”ผ์ž์— ์˜ฌ๋ผ ๊ฐˆ ์ˆ˜ ์žˆ์Œ . ํŒ”๋กœ์šฐ-ํŒ”๋กœ์ž‰๊ด€๊ณ„

๐ŸŒฑ ๋Š๋‚€ ์ 

์˜ค๋Š˜์€ django์™€ ๊ด€๋ จํ•ด์„œ ํŠœํ„ฐ๋‹˜๊ณผ ์ƒ๋‹ด์„ ์˜ค๋žซ๋™์•ˆ ์ง„ํ–‰ํ–ˆ๋‹ค. ์ง€๊ธˆ ๋‹น์žฅ์€ django๊ฐ€ ์ดํ•ด๋„ ์ž˜ ์•ˆ๋˜๊ณ  python์–ธ์–ด๋„ ์–ด๋ ต๊ฒŒ ๋Š๊ปด์ ธ์„œ ์ขŒ์ ˆํ• ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ๋‚˜์ค‘์—๊ฐ€์„œ๋Š” ๋ณ„๊ฒƒ๋„ ์•„๋‹Œ๊ฑธ๋กœ ์–ด๋ ค์›Œํ–ˆ๊ตฌ๋‚˜๋ผ๊ณ  ๊นจ๋‹ฌ์„ ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ผ๋Š” ์กฐ์–ธ์„ ํ•ด์ฃผ์…จ๋‹ค. ๋ญ๋“  ์ฒ˜์Œ ๋ฐฐ์šฐ๊ฒŒ๋˜๋ฉด ์–ด๋ ต๊ฒŒ ๋Š๊ปด์ง€๋Š” ๊ฒƒ์ด ๋‹น์—ฐํ•œ ๊ฒƒ์ด๊ณ  ๋…ธ๋ ฅํ•˜๋ฉด ๋‚˜์ค‘์—๋Š” ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ํ•ด์ฃผ์…”์„œ ์ž์‹ ๊ฐ์ด ์ƒ๊ฒผ๋‹ค. django๋ฅผ ๊ณ„์† ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ๋งŽ์ด ๊ณต๋ถ€ํ•˜๋ฉด์„œ python์–ธ์–ด๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋ ๊ฒƒ์ด๋‹ค. ๋ญ”๊ฐ€ ๋นจ๋ฆฌ ์Šต๋“ํ•ด์•ผ๋œ๋‹ค๋Š” ์ƒ๊ฐ์ด ๊ฐ•ํ•ด์„œ ์ดˆ์กฐํ•ดํ•˜๋ฉด์„œ ๊ณต๋ถ€๋ฅผ ํ–ˆ์—ˆ๋Š”๋ฐ, ๊พธ์ค€ํžˆ ๊ณต๋ถ€ํ•˜๋Š”๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ๋‹ค์‹œํ•œ๋ฒˆ ๊นจ๋‹ฌ์•˜๋‹ค. ์•ž์œผ๋กœ๋„ ๊ณ„์† ํŽ˜์ด์Šค๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๊พธ์ค€ํžˆ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค!!

๐ŸŽ ์ž์„ธํ•œ ์ฝ”๋“œ๋Š” Moonmoo ์— ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค

profile
ํ•˜๋ฃจ ํ•œ๊ฑธ์Œ์”ฉ ๊พธ์ค€ํžˆ ๋‚˜์•„๊ฐ€๋Š” ๊ฐœ๋ฐœ์ž๐Ÿ™†โ€โ™€๏ธ https://github.com/Moonmooj

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด