๐Ÿ“’ [ TIL ] 2022.05.26_28์ผ์ฐจ # Django ๊ฐ•์˜ํ•™์Šต(1)

๋ฌธ๋ช…์ฃผยท2022๋…„ 5์›” 26์ผ
0

[ 2022-05-26 (๋ชฉ) ์˜ค๋Š˜์˜ TIL ]

[ Today Learn ]

  • Django์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ๋™์ž‘ ์›๋ฆฌ์ดํ•ด
  • Django์—์„œ ํ•„์š”ํ•œ ๊ธฐ์ดˆ ๋ช…๋ น
  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์‚ฌ์šฉ์ž ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ , SNS์„œ๋น„์Šค ์ค‘ ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ๋งŒ๋“ค๊ธฐ

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

  • ํŒŒ์ด์ฌ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ข…๋ฅ˜

โ“ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋ž€ ?

๊ฐœ๋ฐœ์„ ๋„์™€์ฃผ๋Š” ํ•˜๋‚˜์˜ ํ‹€๋กœ์„œ ํŒŒ์ด์ฌ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ ์ค‘ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„๋ฉด ์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณตํ•˜๋Š” ํ˜•ํƒœ์ธ 'flask','pyramid'๊ฐ€ ์žˆ๋‹ค. ๋˜ํ•œ ์ด๋ฏธ ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜๊ณ ์žˆ๋Š” ํ˜•ํƒœ์ธ 'Django'๊ฐ€ ์žˆ๋‹ค.

  • ์žฅ๊ณ ์˜ MVT ํŒจํ„ด
    MVTํŒจํ„ด์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์žฅ๊ณ ๊ฐ€ ์ผํ•˜๋Š” ๋ฐฉ์‹์„ ๋ณด์—ฌ์ค€๋‹ค.

    -> M(Model) : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋ธ (ORM)๋กœ์„œ ์ €์žฅ๋˜๊ณ  ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ
    -> V (View) : ์‹ค์งˆ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ์„œ url์„ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ตํ•˜๋Š” ๊ทธ ์‚ฌ์ด์— ์ผ์–ด๋‚˜๋Š” '์„œ๋น„์Šค'๋“ค์ด ์กด์žฌํ•˜๋Š” ๊ณณ
    -> T(Template) : ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„

โ“ ORM ๋ž€ ?
๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘(์—ฐ๊ฒฐ)ํ•ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ,
Django์˜ ORM์€ Python์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋ž˜์Šค ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ , ๋งŒ๋“  ๋ชจ๋ธ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

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

class Post:
    id = IntegerField()
    title = CharField()
    author = CharField()
    context = TextField()
  • ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋งŒ๋“ค๊ธฐ

๊ฐ•์˜๋ฅผ ํ•™์Šตํ•˜๋ฉฐ ๋งŒ๋“ค๊ฒŒ ๋  ๊ธฐ๋Šฅ์€ SNS๊ธฐ๋Šฅ์œผ๋กœ์„œ ํฌ๊ฒŒ ์„ธ๊ฐ€์ง€ ์ •๋„๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

1) ์‚ฌ์šฉ์ž๊ด€๋ฆฌ
2) ๊ธ€์“ฐ๊ธฐ
3) ์นœ๊ตฌ๋งŒ๋“ค๊ธฐ

์ด์— ํ•„์š”ํ•œ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋Šฅ์„ ํ•  ์ˆ˜ ์žˆ๋Š” '์•ฑ'์„ ์•„๋ž˜์™€ ๊ฐ™์ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

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

$ django-admin startapp user
$ django-admin startapp tweet

-> user์•ฑ - ์‚ฌ์šฉ์ž๊ด€๋ฆฌ(ํšŒ์›๊ฐ€์ž…,๋กœ๊ทธ์ธ,๋กœ๊ทธ์•„์›ƒ)๋‹ด๋‹น
-> tweet์•ฑ - ๊ธ€ ๊ด€๋ฆฌ(๊ธ€์“ฐ๊ธฐ,์‚ญ์ œ,์ˆ˜์ •,๋Œ“๊ธ€)

  • User Model ๋งŒ๋“ค๊ธฐ
    Django๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ User๋ชจ๋ธ์„ ์ œ๊ณตํ•˜๊ณ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์˜ ๊ด€๋ฆฌ์™€ ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ์ด ์ด๋ฏธ ๋‹ค ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง์ ‘ ๋กœ์ง์„ ์ดํ•ดํ•˜๊ธฐ์œ„ํ•ด ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.

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

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


# 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)

์œ„์˜ ๋ชจ๋ธ ํด๋ž˜์Šค์—์„œ 'class Meta' ๋Š” ์ด ๋ชจ๋ธ์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ๊ณ , django์—์„œ ์ œ๊ณตํ•˜๋Š” models๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ ์š”์†Œ์— ์–ด๋–ค ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์ด ๋“ค์–ด๊ฐˆ ์ง€ ์ •ํ•ด์ฃผ๊ณ , ๊ฐ ํ•„๋“œ์— ์ œํ•œ์„ ๋‘์—ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ๋งŒ๋“  ๋ชจ๋ธ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋„ฃ์–ด์ฃผ์–ด์•ผํ•˜๋Š”๋ฐ, ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
1) '๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ์„ ์•Œ๋ ค์ฃผ๋Š” ๋ช…๋ น์–ด'

python manage.py makemigrations

2) '๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฐ˜์˜ ํ•ด ์ฃผ๋Š” ๋ช…๋ น์–ด'

python manage.py migrate

โ“ Django Admin ๋ž€ ?
์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด ์žฅ๊ณ ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๋ฏธ ๋งŽ์€ ๊ธฐ๋Šฅ์ด ๊ตฌ์ถ•๋˜์–ด ์žˆ๋Š”๋ฐ, ๊ทธ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๊ฐ€ ๋ฐ”๋กœ 'Admin'์ด๋‹ค. ์ด ๊ด€๋ฆฌ์ž ์‚ฌ์ดํŠธ๋ฅผ ์ปค์Šคํ„ฐ ๋งˆ์ด์ง• ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

'createsuperuser' ๋ฅผ ๋งŒ๋“ค์–ด์•ผ admin ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ ๊ด€๋ฆฌ์ž๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผํ•œ๋‹ค.

python manage.py createsuperuser

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

๊ทธ๋™์•ˆ flask๋กœ๋งŒ ์›นํŽ˜์ด์ง€๋ฅผ ๊ฐœ๋ฐœํ•ด๋ดค๋Š”๋ฐ, Django๋ฅผ ๋ฐฐ์šฐ๋‹ˆ๊นŒ ํ™•์‹คํžˆ flask๋Š” ์ดˆ๊ฐ€์ง‘๊ณผ ๊ฐ™์ด ์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณตํ•˜๋Š”๊ตฌ๋‚˜๋ฅผ ๊นจ๋‹ฌ์•˜๋‹ค. ์•„์ง ๋” ๋ฐฐ์›Œ๋ด์•ผ์•Œ๊ฒ ์ง€๋งŒ Django๋Š” ๋” ๊นŠ์ด ์žˆ๊ฒŒ ๋“ค์–ด๊ฐ€์„œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋Š๋‚Œ์ด ๋“ ๋‹ค. flask๋กœ๋Š” ์ผ์ผํžˆ ๋กœ๊ทธ์ธ์ด๋“  ํšŒ์›๊ฐ€์ž…์ด๋“  html๋ถ€ํ„ฐ css๊นŒ์ง€ ์ง์ ‘ ๋งŒ๋“ค์–ด์•ผํ–ˆ๋Š”๋ฐ, Admin๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ๋“ค์ด ๊ตฌ์ถ•๋˜์–ด์žˆ๋Š”๊ฒŒ ์‹ ๊ธฐํ–ˆ๋‹ค. Django์— ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฏธ ๊ตฌ์ถ•๋˜์–ด์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ์•Œ์•„๋ณด๊ณ ์‹ถ๋‹ค.

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

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

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

comment-user-thumbnail
2022๋…„ 5์›” 26์ผ

์˜ค์˜ค ๊ณต๋ถ€๋ฅผ ๋งŽ์ดํ•˜์…จ๊ตฐ์š”

1๊ฐœ์˜ ๋‹ต๊ธ€

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