#2 INTRODUCTION TO DJANGO - WONILLISM/Clone_airbnb GitHub Wiki
created by wopark
์ฅ๊ณ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ
$ django-admin startproject config
-
rename config -> Aconfig
-
์์์๋ configํด๋๋ฅผ ๊บผ๋ธ ํ Aconfig๋ฅผ ์ญ์
-
์ด ๋ settings.py์ ์๋ secret_key๋ฅผ ๊ทธ๋ฅ ์ฌ๋ฆฌ๊ฒ ๋๋ฉด ๊น์์ ๋ณด์ ๊ฒฝ๊ณ ๋ฉ์ผ์ด ์จ๋ค.
-
์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- secrets.json ํ์ผ ์์ฑ
{
"SECRET_KEY": "(1djli9wygoor+6^5g36bcn^ca+!+@8uc-=bw-3bk)z2pwrdq8"
}
- gitignore์ secrets.json ์ถ๊ฐ
- setting.py ์๋์ ๊ฐ์ด ์์
import os, json
from django.core.exceptions import ImproperlyConfigured
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
secret_file = os.path.join(BASE_DIR, "secrets.json")
with open(secret_file) as f:
secrets = json.loads(f.read())
def get_secret(setting, secrets=secrets):
try:
return secrets(setting)
execept KeyError:
error_msg = "Set the {} environment variable".format(setting)
raise ImproperlyConfigured(error_msg)
SECRET_KEY = get_secret("SECRET_KEY")
...
python manage.py runserver -> ์๋ฒ ๊ตฌ๋
python mamage.py createsuperuser -> ๊ด๋ฆฌ์ ๊ณ์ ๋ง๋ค๊ธฐ
python manage.py migrate -> ๋ฐ์ดํฐ๋ฒ ์ด์ค ์
๋ฐ์ดํธ
INSTALLED_APPS
- django์ ํจ๊ป ๋ธ๋ ค์ค๋ ๊ธฐ๋ณธ ์ฑ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
- django.contrib.admin
- django์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋ถ๋ถ ์ค ํ๋์ธ ์๋ ๊ด๋ฆฌ ์ธํฐํ์ด์ค์ด๋ค.
- ๋ชจ๋ธ์์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ์ ๋ขฐํ ์ ์๋ ์ฌ์ฉ์๊ฐ ์ฌ์ดํธ์ ์ฝํ ์ธ ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ๋น ๋ฅธ ๋ชจ๋ธ ์ค์ฌ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
(์ฐ๊ฒฐํ url/admin/)
์ ํตํด์ ์ฌ์ฉํ ์ ์๋ค.
- django.contrib.auth
- ์ฌ์ฉ์ ์ธ์ฆ ์์คํ ์ ์ง์ํ๋ค.
- ์ฌ์ฉ์ ๊ณ์ , ๊ทธ๋ฃน, ๊ถํ๊ณผ ์ฟ ํค ๊ธฐ๋ฐ์ ์ฌ์ฉ์, ์ธ์ ์ ๋ค๋ฃฌ๋ค.
- django.contrib.contenttypes
- django ๊ธฐ๋ฐ ํ๋ก์ ํธ์ ์ค์น๋ ๋ชจ๋ ๋ชจ๋ธ์ ์ถ์ ํ ์ ์๋ contenttypes ์ฑ์ด ํฌํจ๋์ด ์์ด ๋ชจ๋ธ ์์ ์ ์ํ ๊ณ ๊ธ, ์ผ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
- django.contrib.sessions
- ์ธ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ดํธ ๋ฐฉ๋ฌธ์๋ณ๋ก ์์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ ์ ์๋ค. ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฟ ํค์ ์ก์์ ์ ์ถ์ํํ๋ค.
- django.contrib.messages
- ์ต๋ช ๋ฐ ์ธ์ฆ๋ ์ฌ์ฉ์ ๋ชจ๋์๊ฒ ์ฟ ํค ๋ฐ ์ธ์ ๊ธฐ๋ฐ ๋ฉ์์ง์ ์๋ฒฝํ๊ฒ ์ง์ํ๋ค.
- django.contrib.staticfiles
- ์ ์ ํ์ผ์ ๊ด๋ฆฌํ๋ ํ๋ ์์ํฌ
- django.contrib.admin
django-admin startapp ์ฑ์ด๋ฆ
-
makemigrations
- ์์ฑ / ์์ ๋ ๋ชจ๋ธ๋ค์ ๋ณ๊ฒฝ์ฌํญ์ migrations๋ก ์ ์ฅํ๊ณ ์ Django์๊ฒ ์๋ ค์ค๋ค.
-
migrate
- makemigrations ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ๋ migrations๋ค์ ์คํ์์ผ์ฃผ๊ณ ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ๊ด๋ฆฌํด์ค๋ค.
-
createsuperuser
- ๋ชจ๋ ๊ถํ์ ๊ฐ์ง๋ superuser๋ฅผ ์์ฑํ๋ค.
-
django-admin startapp
app ์ด๋ฆ
- conversations
- lists
- reservations
- reviews
- rooms
- users
- django์๋ ๊ธฐ๋ณธ์ ์ผ๋ก user๊ฐ ์กด์ฌํ์ง๋ง, ์ด user๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผ ํ ์ ์๋ user๋ฅผ ๋ปํ๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ํ์ํ user๋ ํํ์ด์ง๋ฅผ ์ฌ์ฉํ ๊ณ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ์ง ๋ชปํ๋ ์๋ก์ด users๋ฅผ ์์ฑํด์ ์ฌ์ฉํ๋ค.
- app์ ์์ฑํ์๋ ๋ง๋ค์ด์ง๋ ๊ธฐ๋ณธ์ ์ธ ํ์ผ ๋ฐ ํด๋๋ค์ django์๊ฒ ํ์ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ญ์ ํ๊ฑฐ๋ ์ด๋ฆ์ ๋ฐ๊พธ์ด์๋ ์๋๋ค.
์์ฑํ app์์ ํ์ผ๋ค
__init__.py
admin.py
- app์ ๋ด์ฉ๋ค์ admin ํจ๋์ ๋ณด์ฌ์ฃผ๊ธฐ์ํ ํ์ผ
veiw.py
- ํ์ด์ง์์ ๋ณด์ฌ์ง ๋ถ๋ถ๋ค์ ์์ฑํ๋ ํ์ผ -> html๋ ๋
urls.py
- url๋ค์ ๊ด๋ฆฌํ๋ ํ์ผ
- config/urls.py ์ ๋ชจ๋ ์ฑ๋ค์ url์ ๊ด๋ฆฌํ์ง์๊ณ ๊ฐ ์ฑ์ ์๋ urls.py๋ง๋ค์ด์ ์ฐ๋์์ผ์ค๋ค.
apps.py
- ์ฑ์ ๊ตฌ์ฑ์ ๊ด๋ฆฌํ๋ ํ์ผ
models.py
- ์ฑ์ ๋ชจ๋ธ์ ๊ด๋ฆฌํ๋ ํ์ผ(๋ฐ์ดํฐ๋ฒ ์ด์ค) -> ์ฑ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ
tests.py
created by mki
#2.0 Creating a Django Project (05:46)
์ฒซ ๋ฒ์งธ django ํ๋ก์ ํธ ์์ฑํ๊ธฐ
์ด์ ์ ์๋์ ๋ช ๋ น์ผ๋ก pipenvํ๊ฒฝ์ ๋ง๋ ๋ค๋ฉด Pipfileํ์ผ์ด ์์ฑ๋๋ค. ๊ทธ ๋ค์ README.md์ .gitignore์ ๋ง๋ค์.
mkdir airbnb-clone
mv airbnb-clone
pipenv --python 3.7
pipenv install django==2.2.5
์ด์ ์ค์ ๋ก djangoํ๋ก์ ํธ๋ฅผ ์์ํด๋ณด์. ์ฅ๊ณ ํํ ๋ฆฌ์ผ์์๋ ์๋์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด ๋๋ค๊ณ ํ๋ค.
https://docs.djangoproject.com/ko/3.2/intro/tutorial01/
django-admin startproject mysite
๊ทธ๋ฌ๋ ์ ๋ช ๋ น์ด๋ ์ด์ฌ์๋ฅผ ์ํ ๊ฒ์ด๊ณ , ๊ท๋ชจ๋ฅผ ํ์ฅํ๊ธฐ์๋ ๋ณ๋ก์ด๋ค. ๋ฐ๋ผ์ ์๋์ ๊ฐ์ด ์์ํ์.
django-admin startporject config
๊ทธ ๋ค์ ์๋ ๋ช ๋ น์ ์คํํด configํด๋ ์์ ์๋ configํด๋์ manage.py๋ฅผ ๋ฐ์ผ๋ก ์ฎ๊ธฐ์.
mv config Aconfig
mv Aconfig/config Aconfig/manage.py .
rm -rf Aconfig
๋ฒ๊ฑฐ๋ก์ด ๊ณผ์ ์ ํผํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ์์ฑํ์.
django-admin startproject config .
์๋ ์ฑ ์์๋ ์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ถ์ฒํ๊ณ ์๋ค.
https://www.amazon.com/Two-Scoops-Django-1-11-Practices-ebook/dp/B076D5FKFX
Interpreter ์ ํ
VSC๋ ์ฝ๋๋ฅผ ์์ฑํ ๋ ๋์์ด ๋๋Extension๋ค์ ๋ง์ด ์ ๊ณตํ๊ณ ์๋ค. Python์ญ์ Microsoft์์ ์ง์ ์ ๊ณต์ ํ๊ณ ์๋ค. ์ค์น๋ฅผ ํ ๋ค์, VCS์ ๊ฐ์ฅ ์๋ ์ํ๋ฐ๋ฅผ ๋ณด๋ฉด, Python 2.7.10 64-bit๋ก ์ ํ๋์ด ์๋ค. ์ด๊ฒ์ 'airbnb-clone': pipenv๊ฐ ์ ํ์๋ python์ ์ ํํ๋ฉด ์๋ฌ๋ฉ์์ง๊ฐ ์ฌ๋ผ์ง๋ค.
COMMAND+SHIFT+P
๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
ํค์๋
- django-admin
- startproject
#2.1 Setting up VSCode and Python Like a PRO (10:08)
Linter
ํ์ด์ฌ์ ์ปดํ์ผ ์ธ์ด๊ฐ ์๋๊ณ , ๋ฐํ์ ์ธ์ด์ด๋ค. ๋ฐ๋ฌ์ ์ปดํ์ผ ์ธ์ด์ฒ๋ผ ์๋ฌ๋ฅผ ์ฌ์ ์ ์ก์์ฃผ์ง ์๋๋ค.
Linter๋ ์ฌ๋ฌ๋ถ๋ค์ด ์ด ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์๋ฌ๊ฐ ์๊ธธ ๋ถ๋ถ์ ๋ฏธ๋ฆฌ ๊ฐ์งํ๋ ํ์ฅํ๋ก๊ทธ๋จ์ด๋ค. ๋ณ์๋ฅผ ๋ง๋ค๊ณ ์ฌ์ฉํ์ง ์๊ฑฐ๋, ์๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์๋๋๋ฐ, ์ด๋ฌํ ๋ถ๋ถ์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๊ฐ์งํด์ ์๋ ค์ค๋ค.
https://ko.wikipedia.org/wiki/๋ฆฐํธ_(์ํํธ์จ์ด)
๋ํ Linter๋ ํ์ด์ฌ์์ ๋๋ฆฌ ์ฐ์ด๋ ๊ด์ต๋ ์ค์ํ๋ค. ์ด๋ฌํ ๊ด์ต์ ๋์ดํ ๊ฒ์ PEP๋ผ๊ณ ๋ถ๋ฅธ๋ค.
PEP
https://www.python.org/dev/peps/
์ด์ค์์ PEP8์ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์์ฑํด์ผ ํ๋์ง ๋ฌธ์ํํ ๊ฒ์ด๋ค.
https://www.python.org/dev/peps/pep-0008/
์ด๋ฌํ ๊ด์ต์ ์ ๊ฒฝ์ฐ์ง ์๋๋ก ๊ด๋ฆฌํด ์ฃผ๋ ํ๋ก๊ทธ๋จ์ Linter๋ผ๊ณ ํ๋ค. ์ฝ๋๋ฅผ ์์ฑํ ๋ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด, ๋ฌธ์ ๊ฐ ๋๋ ๋ถ๋ถ์ ์๋ ค์ค๋ค. ์ ๋ง ๋ง์ Linter๊ฐ ์๋๋ฐ, ๊ฐ์ฅ ์ ํธ๋๋ Linter๋ flake8์ด๋ค. pylint๋ผ๋ ๊ฒ๋ ์๋ค.
flake8
https://pypi.org/project/flake8/
VSCํ์ ์์ ์ด๋ค linter๋ฅผ ์ ํํ ์ง ๋์ค๋ฉด flake8์ ์ ํํ์.
๊ทธ๋ฌ๋ฉด .vscodeํด๋์ ํจ๊ป ๊ทธ ์์ settings.jsonํ์ผ์ด ๋ง๋ค์ด์ง๋ค.
# .vscode/setting.json
{
"python.pythonPath": "~/.local/share/virtualenvs/mki-934kEbld/"
"python.linting.flake8Enabled": true,
"python.linting.pylintEnabled": false,
"python.linting.enabled": true
}
์์ ๊ฐ์ด ๋ง๋ค์ด์ง์ง ์์๋ค๋ฉด, ์๋ก ์ถ๊ฐํ์. ๊ทธ ๋ค์ flake8์ ์ค์นํ๋ผ๋ ํ์ ์ด ๋ฌ๋ค. ์ค์น๋ฅผ ์งํํ์.
#COMMAND + SHIFT + P
#Python: Select liner
pipenv install flake8 --dev
Pipfile์ ๋ณด๋ฉด ์๋์ ๊ฐ์ด ์ ํ์๋๋ฐ, packages๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ ๋ ํ์ํ ํจํค์ง์ด๊ณ , dev-packages๋ ๊ฐ๋ฐํ ๋ ํ์ํ ํจํค์ง์ด๋ค.
# Pipfile
[source](/WONILLISM/Clone_airbnb/wiki/source)
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
django = "==2.2.5"
pillow = "*"
django-countries = "*"
[dev-packages]
flake8 = "*"
black = "*"
[requires]
python_version = "3.7"
[pipenv]
allow_prereleases = true
Code Formatting
http://c2.com/ppr/formatting.html
Formatter์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ํฌ๋ฉงํ ํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ด๋ค. Linter๊ฐ ์ค๋ฅ๊ฐ ๋ ๋ถ๋ถ์ ์๋ ค์ค๋ค๋ฉด, Formatter๋ ์ค์ ๋ก ์ฝ๋๋ฅผ ์์ ํด์ค๋ค.
black
black์ด๋ formatter๋ฅผ ์ถ์ฒํ๋ค.
https://pypi.org/project/black/
https://www.daleseo.com/python-black/
์ค์นํ๋ ๋ฒ์ ํ์ ์ ๋๋ฌ๋ ๋๊ณ , ์๋์ ๊ฐ์ด ์ ๋ ฅํด๋ ๋๋ค.
pipenv install black --dev --pre
flake8 + black์ ์ต๊ณ ์ ์กฐํฉ์ด๋ค. ์ค์น๋ฅผ ํ๋ฉด VSC์๋์ ์๋ก์ด ์ํ์ฐฝ์ด ์์ฑ๋๋๋ฐ, ์ ์ฅํ ๋๋ง๋ค ๋ฌด์ธ๊ฐ ๋ฐ๋๋ ๊ฒ์ด ๋ณด์ผ ๊ฒ์ด๋ค. ๋ง์ฝ ๋ณด์ด์ง ์์ผ๋ฉด ์๋์ ๊ฐ์ด ์คํํ์.
- settingโ"format on save"โcheck
๋ง์ฝ ์ด๋ฌํ ์ฒดํฌ ๋ฐ์ค๊ฐ ์๋ค๋ฉด setting.json์ ์์ ํด์ฃผ์ด์ผ ํ๋ค.
{
"editor.formatOnSave": true,
}
Line ๊ธธ์ด ์ ํ ์์
ํ์ด์ฌ์ ๋ผ์ธ์ ๊ธธ์ด๊ฐ 79์๋ฅผ ๋์ด์๋ฉด ์๋๋ค. E501์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ, ์์ ์๋ ๋ชจ๋ํฐ๊ฐ ์์์ ์ด์ฉ ์ ์์์ง๋ง, ์ง๊ธ์ ๋ชจ๋ํฐ๊ฐ ํฌ๋ค. ๊ทธ๋์ ์ด๋ฐ ์ ํ์ด ์์ด๋ ๋๋ค. ๊ทธ๋์ ์๋์ ๊ฐ์ด setting.jsonํ์ผ์ ์์ ํด์ฃผ์.
{
"python.linting.flake8Args": ["--max-line-length=88"]
}
setting.json
์ง๊ธ๊น์ง ์์ ํ setting.json์ ํ ๋์ ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
{
"python.pythonPath": "~/.local/share/virtualenvs/mki-934kEbld/",
"python.linting.flake8Enabled": true,
"python.linting.pylintEnabled": false,
"python.linting.enabled": true,
"python.formatting.provider": "black",
"python.linting.flake8Args": [
"--max-line-length=88"
],
}
#2.2 Falling in love with Django part One (06:47)
ํ๋ก์ ํธ๋ฅผ ๋ง๋ ๋ค์ ์์ฑ๋ ํ์ผ๋ค์ ์ดํด๋ณด์. ์ฐ์ manage.py๊ฐ ์๋ค.
manage.py
https://docs.djangoproject.com/ko/3.2/ref/django-admin/
https://devlog.jwgo.kr/2018/02/07/what-is-the-diff-btw-manage-django-admin/
config/init.py
init.py๋ ์ฅ๊ณ ๊ฐ ์๋๋ผ ํ์ด์ฌํํ ํ์ํ ๊ฒ์ด๋ค. ์๋ก์ด ํด๋๋ฅผ ๋ง๋ ๋ค,๊ทธ ํด๋์ ํ์ผ๋ค์ ์ฌ์ฉํ ๋์, ํ์ด์ฌ์ ํญ์ init.py๊ฐ ํ์ํ๋ค. ๊ทธ๋์ผ ํ์ด์ ํจํค์ง๋ก ์ธ์ํด์ ํ์ผ์ importํ ์ ์๋ค.
https://velog.io/@limes/Python-init.py-ํ์ผ์-์ญํ
config/setting.py
์ฅ๊ณ ๊ฐ ๋ง๋ค์ด ๋์ ๊ฒ.
INSTALLED_APPS
MIDDLEWARE
TEMPLATES
WSGI_APPLICATION
DATABASES
AUTO_PASSWORD_VALIDATORS
๋ชจ๋ ๊ฒ์ด ์ค๋น๊ฐ ๋์ด์๋ค.
TIME_ZONE = "Asia/Seoul"
๋งจ ์์ ์ฃผ์์ ๋งค์ฐ ์ค์ํ๋ ๊ผญ ์ฝ์ด๋ผ. ๋งค์ฐ ๋์์ด ๋๋ฉฐ, ๋งํฌ๋ ๋งค์ฐ ๋์์ด ๋๋ค.
https://docs.djangoproject.com/ko/3.2/topics/settings/
config/urls.py
config/wsgi.py
Django Documentation
์ฌ๋ฌ๋ถ์ ์๋ก์ด ๋ฒ ํ
์ฅ๊ณ ์ ์ฒซ๋ฒ์งธ ์ข์ ์
Django์ ํ์ํ ๋ชจ๋ ๊ฒ์ด ์ฌ๊ธฐ์ ์๋ค.
์ธํ ํ์ผ์ ๋ณด๊ณ ๋ชจ๋ฅด๋ฉด ๋งํฌ๋ฅผ ์ด์ด์ ๋ณด์.
์ฅ๊ณ ๋ ๋ชจ๋ ๊ฒ์ ์ค๋นํด ๋์๊ณ , ์์ค์ฝ๋๋ฅผ ๋ณผ ์ ์๊ณ , ์ฝ๋ฉํธ๋ ์น์ ํ๊ณ ๋ํ๋จผํธ๋ ์น์ ํ๋ค.
#2.3 Falling in love with Django part Two (09:39)
manage.py
Commandํค๋ฅผ ๊พน ๋๋ฅด๋ฉด function์ ์ ๋ถ๋ถ์ผ๋ก ๊ฐ๋ค.
intellisence
https://code.visualstudio.com/docs/editor/intellisense
manage.py runserver
pythonhttps://docs.djangoproject.com/ko/3.2/ref/django-admin/#django-admin-runserver
logger
ํ์ผ์ ์ ์ฅํ๋ ์๊ฐ ์ฆ์ ๋ค์ ์คํ์ด ๋๋ค.
db.sqlite3 ๊ฐ๋ฐ์ฉ ๋๋น ์๋์ผ๋ก ์์ฑ๋จ.
127.0.0.1:8000/admin
์คํ์ด ์๋๋ค.
ctrl + z
manage.py migrate
pythonhttps://docs.djangoproject.com/ko/3.2/ref/django-admin/#django-admin-migrate
python manage.py runserver
127.0.0.1:8000/admin
์ฌ์ฉ์๊ฐ ์๋ค.
manage.py createsuperuser
python๋ค์ ๋ค์ด๊ฐ์ ์ฌ์ฉ์ mki ๋น๋ฐ๋ฒํธ์ ๋ ฅ
#2.4 Django Migrations (09:12)
manage.py makemigrations
pythonhttps://docs.djangoproject.com/ko/3.2/ref/django-admin/#makemigrations
manage.py migrate
pythonhttps://docs.djangoproject.com/ko/3.2/ref/django-admin/#django-admin-migrate
db.sqlite3์ญ์
unapplied migration ์๋ฌ๋ฉ์์ง
์ฅ๊ณ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฐ๋๋์ด์์ง ์๋ค.
SQLite3์ ์๊ท๋ชจ ํ๋ก์ ํธ์์ ์ฌ์ฉ
PostgreSQL
์ฐ๋ฆฌ์ ์ต์ 2๊ฐ.
SQL์ ๊ณต๋ถํด์ ์ฌ์ฉํ์.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌด์์ ๋ฃ์์ง ์ ํด์ฃผ์ด์ผ ํ๋ค.
์ฅ๊ณ ์๋ migration system์ด ์๋ค.
๋ฌด์ธ๊ฐ๋ฅผ ํน์ ์ฅ์์์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ด๋์ํค๋ ๊ฒ์.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฒฝ์ฐ ํ๋์ ์ํ์์ ๋ค๋ฅธ ์ํ๋ก ์ฎ๊ธฐ๋ ๊ฒ.
๋ฐ์ดํฐ ์ ํ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค migration์ด ํ์ํ๋ค.
python manage.py makemigrations
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฅ๊ณ ๋ฅผ ๋๊ธฐํ...
python manage.py migrate
#2.5 Django Applications (09:09)
์ด๋์ ๋ฌด์์ ๋ฃ์ ๊ฒ์ธ๊ฐ?
project๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ชจ์.
์ดํ์ function์ ๋ชจ์
room์ด๋ ๊ณตํต. ์์ฑ ์ถ๊ฐ ์ญ์
review๊ธฐ๋ฅ.
์์ฒญ ๋ง์ ๊ธฐ๋ฅ๋ค์ ์ด๋ ํด๋์ ๋ฃ์๊น?
๊ฑฐ๋ํ๊ณ ์ด๋ง๋ฌด์ํ ํด๋๋ฅผ ๋ง๋ค๋ฉด ์๋๋ค.
Divide and conquer
๊ณํ์ ํ๊ณ ์์ํด์ผ ํ๋ค.
์์ ํด๋๋ค์ ์ฌ๋ฌ๊ฐ ๋ง๋ค์ด์ config์ importํ ๊ฒ์ด๋ค. ์ฌ๋ฌ ๋งค์ฐ ์์ ์ดํ๋ฆฌ์ผ์ด์ ๋ค์ ๋ชจ์.
์ธ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ณ ์๋ง๋ค์ง ์ ํด์ผ ํ๋ค.
ํ ๋ฌธ์ฅ์ผ๋ก ํํํ ์ ์๋ ์ดํ๋ฆฌ์ผ์ด์ ! and, or๋ก ์ค๋ช ํ๋ฉด ์๋๋ค.
ํญ์ ์๊ฒ ๋๋๊ธฐ!
#2.6 Creating the Apps! (06:16)
startapp
https://docs.djangoproject.com/ko/3.2/ref/django-admin/#startapp
airbnb-clone์, configํด๋ ๋ฐ์์ ์๋ ๋ช ๋ น์ ์คํํ์.
django-admin startapp rooms
ํ๋ ๋ ํด๋ณด์
django-admin startapp users
django-admin startapp reviews
django-admin startapp conversations
django-admin startapp lists
django-admin startapp reservations
application์ ์ถ๊ฐํด์ผ ๊ด๋ฆฌ์์์ ๋ณผ ์ ์๋ค.
django user
#2.7 Explaining the Apps (07:38)
๋ง๋ application์์ ์๋ ํด๋์ ํ์ผ๋ค์ ์ด๋ฆ์ ์ ๋ ๋ณ๊ฒฝํด์๋ ์๋๋ค.
framework์ library์ ์ฐจ์ด์ ์, framework๋ ๋ฃฐ์ ๋ฐ๋ผ์ผ ํ๋ค. react๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ! ์ด๋ฆ๋ค์ optional์ด ์๋๋ค!
์ฅ๊ณ ๋ urls.py๋ฅผ ์ง์ผ๋ณด๊ณ ์๋ค.
framework๋ฃฐ์ ๋ฐ๋ผ์ผ ํ๋ค!
migrations
init.py
admin.py
adminํจ๋์ ์ ์ฉ๋๋ ๊ฒ๋ค
apps.py
configurations...?
models.py
data
database
tests.py
views.py
์ฌ์ฉ์๋ค์ด ๋ณด๋ ๊ฒ
html render, form upload
urls.py
applicationํด๋ ์์ urls๋ฅผ ์๋ก ๋ง๋ค์ด์ url๋ค์ ๋ถํ ์ ๋ณตํ์!