[0527] TIL 31์ผ์ฐจ

nikevapormaxยท2022๋…„ 5์›” 26์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
29/116
post-custom-banner

๐Ÿ˜‚ Django 2์ฃผ์ฐจ

๐Ÿ˜ญ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์ƒ์„ฑ

- ์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ

  • ์œ„์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์ฃผ๋กœ ์ฝ”๋”ฉ์„ ํ•˜๊ฒŒ ๋  ๋ถ€๋ถ„์€ url๊ณผ view ๋ถ€๋ถ„์ด๋‹ค.
    • url : ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ์ฃผ์†Œ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •ํ•ด์ฃผ๋Š” ๊ณต๊ฐ„
      • url conf : ๋Œ€๋ถ€๋ถ„ url.py์—์„œ ์ž‘์„ฑํ•œ๋‹ค.
    • view : url์—์„œ ์–ด๋–ค ์—ญํ•  ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ธ์ง€ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ณต๊ฐ„
      • view.py์—์„œ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์ฆ‰, url์„ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด view๋„ ๊ฐ™์ด ๋งŒ๋“ค์–ด์•ผ ๋œ๋‹ค๊ณ  ์ƒ๊ฐ!

- sns ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

  • 3 ๊ฐ€์ง€์˜ ๊ธฐ๋Šฅ ๋ถ„๋ฆฌ
    • ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ (ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ)
    • ๊ธ€์“ฐ๊ธฐ ๊ด€๋ฆฌ
    • ํŒ”๋กœ์›Œ ๊ด€๋ฆฌ
  • ๊ฒฐ๊ตญ ์‚ฌ์šฉ์ž๋ฅผ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋จ์œผ๋กœ์จ ํŒ”๋กœ์›Œ ๋˜ํ•œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฏ€๋กœ, ํฌ๊ฒŒ ์‚ฌ์šฉ์ž์™€ ๊ธ€์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.
  • ์‚ฌ์šฉ์ž์™€ ๊ธ€์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์•ฑ ์ƒ์„ฑ
    • ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ terminal์— ์ž…๋ ฅํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํด๋”๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
$ django-admin startapp user
$ django-admin stratapp tweet

  • ์•„๋ž˜์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์œ„์—์„œ ๋งŒ๋“  2๊ฐœ์˜ ์•ฑ์„ ํฌํ•จํ•˜์—ฌ ์ด 3๊ฐœ์˜ ์•ฑ์ด ์กด์žฌํ•œ๋‹ค. (ํฐ ํด๋”)
    • mySpartaSns ํด๋”๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“  ์ •๋ณด๋“ค์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.
  • ์œ„์™€ ๊ฐ™์ด ์•ฑ์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด, django์—๊ฒŒ ์–ด๋–ค ์•ฑ์„ ๋งŒ๋“ค์—ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์–ด์•ผ ํ•œ๋‹ค.
    • mySpartaSns - settings.py ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ์„ฑํ•œ ์•ฑ์„ ์ž…๋ ฅํ•ด ์ค€๋‹ค.
      INSTALLED_APPS = [
      		# ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ์žฅ๊ณ ๊ฐ€ ์ด๋ฏธ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š” ์•ฑ๋“ค 
           'django.contrib.admin',
           'django.contrib.auth',
           'django.contrib.contenttypes',
           'django.contrib.sessions',
           'django.contrib.messages',
           'django.contrib.staticfiles',
           
           # ๋ฐฉ๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์•ฑ๋“ค
           'tweet',
           'user',
       ]

๐Ÿ˜ญ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ธํŒ…

- settings.py ์•ˆ์— ์„ธํŒ…๋˜์–ด ์žˆ๋Š” db

  • settings.py๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ์—†์ด ์‹คํ–‰๋œ๋‹ค๋ฉด db๊ฐ€ ์ž˜ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค .
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
  • ๋˜ํ•œ ์‹คํ–‰ ํ›„ ์•„๋ž˜์™€ ๊ฐ™์ด db ํด๋”๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

- db ํ™•์ธ ๋ฐฉ๋ฒ•

  • ํŒŒ์ด์ฐธ์˜ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด db.sqlite3์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํƒญ์ด ์ผœ์ง€๋ฉด, + ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฒฝ๋กœ์— ์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ๋ถˆ๋Ÿฌ์™€ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.

    • ๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋ช…์„ ์ž˜ ํ™•์ธํ•˜๊ณ , ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ์–ด๋–ค ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์™€ ๋ณผ ๊ฒƒ์ธ์ง€ ์ •ํ•˜๋ฉด ๋œ๋‹ค. ๋‚˜์˜ ๊ฒฝ์šฐ๋Š” db.sqlite3์ด๋ฏ€๋กœ ํ•ด๋‹น ํŒŒ์ผ์„ ์„ ํƒํ•˜์˜€๋‹ค.
  • ์šฐ๋ฆฌ๋Š” db.sqlite3๋ฅผ ์—ด ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— sqlite3๋ผ๋Š” ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์„ ํƒํ•˜๊ณ  ํ™•์ธ์„ ๋ˆ„๋ฅด๋„๋ก ํ•˜๊ฒ ๋‹ค.

  • ๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฐฝ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

    • ์—ฌ๊ธฐ์„œ ์ด๋ฆ„์€ ๋‚ด๊ฐ€ ์ ์šฉํ•˜๊ณ  ์‹ถ์€ ์ด๋ฆ„์„ ์“ฐ๋ฉด ๋œ๋‹ค.
    • ๊ทธ ์•„๋ž˜์˜ ํŒŒ์ผ๊ณผ URL์€ ์•Œ์•„์„œ ์ž˜ ์„ธํŒ…๋˜์–ด ์žˆ์œผ๋‹ˆ ๊ฑด๋“œ๋ฆฌ์ง€ ๋ง๊ฒƒ!
    • ์ค‘์š”ํ•œ ๊ฒƒ์€ ์•„๋ž˜์ชฝ์— ์žˆ๋Š” ๋ˆ„๋ฝ๋œ ๋“œ๋ผ์ด๋ฒ„ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์šด๋กœ๋“œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋„๋ก ํ•˜๊ฒ ๋‹ค.


      ๊ทธ๋Ÿฌ๋ฉด ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  ์œ„์™€ ๊ฐ™์ด ๋ฉ”์„ธ์ง€๊ฐ€ ๋œฌ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ ์šฉ์„ ๋ˆ„๋ฅด๊ณ  ํ™•์ธ์„ ๋ˆŒ๋Ÿฌ์ฃผ๋ฉด ๋œ๋‹ค.
  • ์œ„์˜ ์ž‘์—… ํ›„, ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฐฝ์— ์šฐ๋ฆฌ์˜ db.sqlite3์ด ์ƒ์„ฑ๋˜๊ฒŒ ๋œ๋‹ค.

    • console ์ฐฝ๋„ ๊ฐ™์ด ์—ด๋ฆฌ๋Š” ๋ฐ ๊ทธ๊ฒƒ์€ ํ˜„์žฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

- ORM(Object Relational Mapping)

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด(object)๋กœ ๋ณด๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฟผ๋ฆฌ๊ฐ€ ์•„๋‹Œ class๋กœ ์‰ฝ๊ฒŒ ํ‘œํ˜„ ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

๐Ÿ˜ญ user/models.py

  • user model ์ƒ์„ฑ

    • ์›๋ž˜ django์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋‚˜ ์Šค์Šค๋กœ ์ƒ์„ฑํ•ด๋ณด๋Š” ์—ฐ์Šต ์ง„ํ–‰

    • ๋ชจ๋ธ ์ƒ์„ฑ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์—‡์ด ์žˆ์„์ง€๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์•˜๋‹ค.

      • ์ด๋ฆ„, ๋น„๋ฐ€๋ฒˆํ˜ธ, ์ƒ์„ฑ์ผ ๋“ฑ์˜ ์ •๋ณด
    • ์•„๋ž˜์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ๊ฒฝ๋กœ๋กœ models.py์— ๋“ค์–ด์˜จ๋‹ค.

    • ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„๊ณผ ์œ ์ €์˜ ๊ธฐ๋ณธ ์ •๋ณด๋ฅผ ์„ธํŒ…ํ•ด์ฃผ์—ˆ๋‹ค.

      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•ˆ์˜ ์†์„ฑ๋“ค์˜ ํƒ€์ž…์„ ๊ผญ ์ •ํ•ด์ฃผ์–ด์•ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•ˆ์— ์ €์žฅ์ด ๋œ๋‹ค.
        #user/models.py
         from django.db import models
         
         # Create your models here.
         class UserModel(models.Model):
         # DB ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๋“ฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •๋ณด๋ฅผ ๋„ฃ์–ด์ฃผ% ์—ญํ• 
         		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 ๋ชจ๋ธํ•„๋“œ ์ข…๋ฅ˜ (๋ฌผ๋ก  ํ›จ์”ฌ ๋” ๋งŽ๋‹ค)
      ๋ฌธ์ž์—ด : CharField, TextField
      ๋‚ ์งœ/์‹œ๊ฐ„: DateTimeField, DateField, TimeField
      ์ˆซ์ž : IntegerField, FloatField
      ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๊ณผ ์—ฐ๊ด€์„ ์ง€์–ด ์ค„ ๋•Œ : ForeignKey
  • ์ƒ์„ฑํ•œ user/models.py์— ๋Œ€ํ•ด django์—๊ฒŒ ์•Œ๋ ค์ฃผ๊ธฐ

    • ํ„ฐ๋ฏธ๋„์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•œ๋‹ค.
      $ python3 manage.py makemigrations 
    • ๊ทธ ํ›„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•˜์—ฌ django์—๊ฒŒ user/models.py๊ฐ€ ์ƒ๊ธฐ๋ฉด์„œ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์ด ์žˆ์œผ๋‹ˆ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ db์— ๋ฐ˜์˜ํ•ด ๋‹ฌ๋ผ๊ณ  ํ•œ๋‹ค.
      • django์—์„œ ์ด๋ฏธ ๋งŒ๋“ค์–ด ๋†“์€ ๋‚ด์šฉ๋“ค์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์˜ ๋ช…๋ น๋ฌธ๋งŒ ์ž…๋ ฅํ•˜๋”๋ผ๋„ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ชจ๋ธ์ด ๋งŒ๋“ค์–ด ์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
      • Running migarations์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ค„์„ ๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋ฐฉ๊ธˆ ๋งŒ๋“  user ๋ชจ๋ธ์ด ์ž˜ ๋ฐ˜์˜๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
      $ python3 manage.py migrate
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํƒญ์œผ๋กœ ๋Œ์•„๊ฐ€ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™•์ธ

    • ์šฐ์„  ์—ด๋ ค์žˆ๋Š” ํƒญ์„ ์ƒˆ๋กœ๊ณ ์นจํ•ด์ค€๋‹ค.
    • ๊ทธ ํ›„ ๋‚ด๊ฐ€ ์ƒ์„ฑํ•œ user ๋ชจ๋ธ์„ ๋œปํ•˜๋Š” my_user ํƒญ์œผ๋กœ ๊ฐ„๋‹ค.
    • ์šฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑํ•˜๋ ค ํ•œ username, password, bio, created_at, update_at์ด ์ž˜ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , django์—์„œ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋Š” id๊ฐ’ ๋˜ํ•œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

- admin ํŽ˜์ด์ง€ ์ž…์„ฑ

  • ๋จผ์ € ํŒŒ์ด์ฐธ์—์„œ mySpartaSns๋ฅผ ์‹คํ–‰์‹œ์ผœ ์ค€๋‹ค.
  • django์˜ url์„ ์ง์ ‘ ์ž…๋ ฅํ•˜๋˜์ง€, ์•„๋ž˜ ํ„ฐ๋ฏธ๋„์— ๋‚˜์˜ค๋Š” url์„ ์ง์ ‘ ์ž…๋ ฅํ•˜๋˜์ง€ ํ•ด์„œ ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ„๋‹ค.
  • ์ฒ˜์Œ์— ํ•ด๋‹น url์„ ๋ˆŒ๋Ÿฌ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ์˜ค๋ฅ˜ ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.
    • ํ˜„์žฌ ์„ธํŒ…์ด ๋‹ค ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋’ค์— /admin์„ ๋ถ™์—ฌ admin ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ด์ฃผ์—ˆ๋‹ค.

  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด admin ํŽ˜์ด์ง€๊ฐ€ ์ž˜ ๋‚˜์™”๋‹ค๋ฉด django๊ฐ€ ์—๋Ÿฌ ์—†์ด ์ž˜ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

  • ํ™•์ธ์„ ์™„๋ฃŒํ•˜์˜€๋‹ค๋ฉด, django ์„œ๋ฒ„๋ฅผ ๋ˆ ๋’ค superuser๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

    • ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ์„ฑํ•˜๋ฉด ๋˜๋ฉฐ, ํŽธํ•˜๊ฒŒ ํ•˜๋ ค๊ณ  ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฐ™๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค๊ฐ€ ํ•œ ๋ฒˆ ๊นŒ์˜€๋‹ค.
  • ์ด์ œ ๋‹ค์‹œ admin ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ€ ์•„๊นŒ ์ƒ์„ฑํ•œ username๊ณผ password๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋กœ๊ทธ์ธ์ด ๋˜๋ฉฐ ์•„๋ž˜ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•œ๋‹ค.

    • Users๋ฅผ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋ฉด ๋ฐฉ๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑํ•œ superuser์˜ ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.
  • admin ํŽ˜์ด์ง€์— ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์—ˆ๋˜ user/models.py๋ฅผ ๋“ฑ๋กํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ user์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋“ฑ๋ก์„ ์ง„ํ–‰ํ•˜๋Ÿฌ ๊ฐ€๋„๋ก ํ•˜๊ฒ ๋‹ค.

  • ์šฐ์„ , user app ์— ์žˆ๋Š” admin.py ๋กœ ๋“ค์–ด๊ฐ„๋‹ค. ๊ทธ ํ›„, ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

# django์—์„œ admin ํˆด์„ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค.
from django.contrib import admin
# ํ˜„์žฌ ์ด ํŒŒ์ผ์˜ ์œ„์น˜์™€ ๋™์ผํ•œ ํด๋” ๋‚ด์— ์žˆ๋Š” models.์˜ Usermodel์„ ์‚ฌ์šฉํ•œ๋‹ค
from .models import UserModel

# Register your models here.
# ๋‚˜์˜ UserModel์„ Admin์— ์ถ”๊ฐ€
admin.site.register(UserModel) 
  • ์ฝ”๋“œ ์ž…๋ ฅ ํ›„, ๋‹ค์‹œ django admin ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด User models๊ฐ€ ๋“ค์–ด์™€ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • User models์˜ Add๋ฅผ ๋ˆ„๋ฅด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์šฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑํ–ˆ๋˜ ๋ชจ๋ธ์˜ ์š”์†Œ๋“ค์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ created_at๊ณผ updated_at์€ django์—์„œ ์ž๋™์œผ๋กœ ์ž…๋ ฅํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ๋Š” ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š”๋‹ค.


๐Ÿ˜ญ tweet/models.py

  • ์œ„์˜ ๊ณผ์ •๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ tweet app์˜ ๋ชจ๋ธ์„ ์ƒ์„ฑํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์˜ ๊ฒฝ๋กœ์— ์žˆ๋Š” models.py๋กœ ๋“ค์–ด๊ฐ€๋ฉด ๋œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด models.py๋ฅผ ์„ธํŒ…ํ•ด์ฃผ๋„๋ก ํ•˜๊ฒ ๋‹ค.
# tweet/models.py
from django.db import models
# user app์— ์žˆ๋Š” models๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ๊ฑด๋ฐ, ๊ฑ” ์ด๋ฆ„์€ Usermodel์ด์•ผ
from user.models import UserModel


# Create your models here.
class TweetModel(models.Model):
    class Meta:
        db_table = "tweet"
	
    # ๋‹ค๋ฅธ ๋ชจ๋ธ(Usermodel)์˜ author๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•œ๋‹ค. 
    author = models.ForeignKey(UserModel, on_delete=models.CASCADE)
    content = models.CharField(max_length=256)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
  • ์•ž์—์„œ ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์ด django ์„œ๋ฒ„๋ฅผ ์ข…๋ฃŒํ•ด์ฃผ๊ณ , terminal์„ ํ‚จ ๋’ค ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.
    • django์—๊ฒŒ Tweetmodel์„ ์ƒ์„ฑํ–ˆ์Œ์„ ์•Œ๋ ค์ค€๋‹ค.
    • ๊ทธ๋ฆฌ๊ณ  Tweetmodel์˜ ๋‚ด์šฉ์„ db์— ๋„ฃ์–ด์ค€๋‹ค.
$ python manage.py makemigrations
$ python manage.py migrate

  • ํ•ด๋‹น ์ž‘์—… ์ง„ํ–‰ ํ›„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฐฝ์—์„œ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

- admin ํŽ˜์ด์ง€์— Tweetmodel ๋„ฃ๊ธฐ

  • tweet/admin.py์— ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
from django.contrib import admin
from .models import TweetModel

# Register your models here.
admin.site.register(TweetModel)
  • ๋ชจ๋ธ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋„ฃ๋Š” ์ž‘์—…์„ ํ•˜๋Š๋ผ ๊บผ๋‘์—ˆ๋˜ django ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ๋Œ๋ ค์ค€๋‹ค.
  • url์„ ํ†ตํ•ด admin ํŽ˜์ด์ง€์— ์ ‘์†ํ•œ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด Tweet models๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ ธ ์žˆ์œผ๋ฉฐ, author๋ฅผ ๊ณจ๋ผ ์–ด๋–ค user๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒƒ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์—ˆ๋‹ค.

profile
https://github.com/nikevapormax
post-custom-banner

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