
url๊ณผ view ๋ถ๋ถ์ด๋ค. ์ ๊ทผํ ์ ์๋๋ก ์ ํด์ฃผ๋ ๊ณต๊ฐurl conf : ๋๋ถ๋ถ url.py์์ ์์ฑํ๋ค.์ด๋ค ์ญํ ๋๋ ๊ธฐ๋ฅ์ ์ํํ ๊ฒ์ธ์ง ๋ง๋ค์ด์ฃผ๋ ๊ณต๊ฐview.py์์ ์์ฑํ๊ฒ ๋๋ค. ์ฌ์ฉ์์ ๊ธ์ ๋ํ ๊ด๋ฆฌ๋ฅผ ์งํํ๋ฉด ๋๋ค.์ฌ์ฉ์์ ๊ธ์ ๋ํ ๊ด๋ฆฌ๋ฅผ ์งํํ๊ธฐ ์ํด ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด ์ฑ ์์ฑ$ django-admin startapp user
$ django-admin stratapp tweet

mySpartaSns ํด๋๋ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ ๋ชจ๋ ์ ๋ณด๋ค์ ๊ฐ๊ณ ์๋ค.
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',
]DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}

ํ์ด์ฐธ์ ์ค๋ฅธ์ชฝ ์๋จ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํตํด db.sqlite3์ ๋ํ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค.

ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค ํญ์ด ์ผ์ง๋ฉด, + ๋ฒํผ์ ๋๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒฝ๋ก์ ์๋ ํ์ผ๋ค์ ๋ถ๋ฌ์ ๋ณด์ฌ์ค ์ ์๋ค.
db.sqlite3์ด๋ฏ๋ก ํด๋น ํ์ผ์ ์ ํํ์๋ค. ์ฐ๋ฆฌ๋ db.sqlite3๋ฅผ ์ด ๊ฒ์ด๊ธฐ ๋๋ฌธ์ sqlite3๋ผ๋ ๋๋ผ์ด๋ฒ๊ฐ ํ์ํ๋ค. ์ ํํ๊ณ ํ์ธ์ ๋๋ฅด๋๋ก ํ๊ฒ ๋ค.

๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ ์ฐฝ์ผ๋ก ๋์ด๊ฐ๊ฒ ๋๋ค.
ํ์ผ๊ณผ URL์ ์์์ ์ ์ธํ
๋์ด ์์ผ๋ ๊ฑด๋๋ฆฌ์ง ๋ง๊ฒ!๋๋ฝ๋ ๋๋ผ์ด๋ฒ ํ์ผ์ ๋ค์ด๋ก๋ ํ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๋ค์ด๋ก๋ ๋ฒํผ์ ๋๋ฅด๋๋ก ํ๊ฒ ๋ค.

์์ ์์
ํ, ์๋์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐฝ์ ์ฐ๋ฆฌ์ db.sqlite3์ด ์์ฑ๋๊ฒ ๋๋ค.
console ์ฐฝ๋ ๊ฐ์ด ์ด๋ฆฌ๋ ๋ฐ ๊ทธ๊ฒ์ ํ์ฌ ์ฌ์ฉํ์ง ์๋๋ค.
class๋ก ์ฝ๊ฒ ํํ ๋ฐ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.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)
๋ฌธ์์ด : CharField, TextField
๋ ์ง/์๊ฐ: DateTimeField, DateField, TimeField
์ซ์ : IntegerField, FloatField
๋ค๋ฅธ ํ
์ด๋ธ๊ณผ ์ฐ๊ด์ ์ง์ด ์ค ๋ : ForeignKey
์์ฑํ user/models.py์ ๋ํด django์๊ฒ ์๋ ค์ฃผ๊ธฐ
$ python3 manage.py makemigrations 
user/models.py๊ฐ ์๊ธฐ๋ฉด์ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ด ์์ผ๋ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ db์ ๋ฐ์ํด ๋ฌ๋ผ๊ณ ํ๋ค. $ python3 manage.py migrate
๋ฐ์ดํฐ๋ฒ ์ด์ค ํญ์ผ๋ก ๋์๊ฐ ์์ฑ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ธ
my_user ํญ์ผ๋ก ๊ฐ๋ค.
username, password, bio, created_at, update_at์ด ์ ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์๊ณ , django์์ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ id๊ฐ ๋ํ ํ์ธํ ์ ์๋ค.
/admin์ ๋ถ์ฌ admin ํ์ด์ง๋ก ์ด๋ํด์ฃผ์๋ค. 

ํ์ธ์ ์๋ฃํ์๋ค๋ฉด, django ์๋ฒ๋ฅผ ๋ ๋ค superuser๋ฅผ ์์ฑํ๋๋ก ํ๊ฒ ๋ค.

์ด์ ๋ค์ admin ํ์ด์ง๋ก ๋์๊ฐ ์๊น ์์ฑํ username๊ณผ password๋ฅผ ์
๋ ฅํด์ฃผ๋ฉด ๋ก๊ทธ์ธ์ด ๋๋ฉฐ ์๋ ํ์ด์ง๋ก ์ด๋ํ๋ค.
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์์ ์๋์ผ๋ก ์
๋ ฅํด์ฃผ๊ธฐ ๋๋ฌธ์ ํด๋น ํ์ด์ง์์๋ ๋ํ๋์ง ์๋๋ค.

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)
$ python manage.py makemigrations
$ python manage.py migrate


tweet/admin.py์ ํด๋น ์ฝ๋๋ฅผ ์
๋ ฅํ๋ค. from django.contrib import admin
from .models import TweetModel
# Register your models here.
admin.site.register(TweetModel)
Tweet models๊ฐ ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
author๋ฅผ ๊ณจ๋ผ ์ด๋ค user๊ฐ ์์ฑํ ๊ฒ์ธ์ง ์ ์ ์๊ฒ ํด์ฃผ์๋ค.