์์์ ๊ฐ์ํ๊ฒฝ ์ค์น์ ๋ํด ์งํํ์๋ค. ์์ผ๋ก์ ๊ณผ์ ์ ๊ฐ์ํ๊ฒฝ(์ด๋ฆ์ test)์์ ์งํ๋๋ค.
์ด๋ฒ์๋ Django tutorial1 ๊ณผ์ ์ ๋ํ ์ค์ต๊ณผ์ ์ ์ ๋ฆฌํ๋ค.
- framework, Database ์ค์น
- Django project ๋ง๋ค๊ธฐ
- Server ์คํ ๋ฐ ํ์ธ
- Django์์ mysql server ์ฐ๋์ ์ํ ์์
Django๋ ๊ธฐ๋ณธ์ผ๋ก sqlite3๋ฅผ ์ ๊ณตํ๋ ๋๋ mysql์ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก ์ฐ๋ถํฌ์ mysql์ ๋จผ์ ์ค์นํด์ผ ํ๋ค. (pip mysqlclient ํจํค์ง ์ค์น์์ ์์๊ฐ ์ค์ํ ๊ฒ ๊ฐ๋ค)
mysql ์ค์น๋ ์ฌ๊ธฐ ๋ฅผ ์ฐธ์กฐ.
mysql ์ค์น๊ฐ ์๋ฃ๋์์ผ๋ฉด django์ mysql์ ์ฌ์ฉํ ์ ์๋๋ก ์๋์ฒ๋ผ ํจํค์ง ์ค์น
pip install django
pip install django-cors-headers
pip install mysqlclient
Django-admin startproject ํ๋ก์ ํธ์ด๋ฆ
์ ๋ช ๋ น์ผ๋ก ํ๋ก์ ํธ ํด๋ ๋ฐ ํ์ผ๋ค์ ๋ง๋ค์ ์๋ค. ๋๋ home ๋๋ ํ ๋ฆฌ์์ "mysite"๋ผ๋ ์ด๋ฆ์ผ๋ก ์์ฑํ๋ค. ๊ทธ ๊ฒฐ๊ณผ ์๋์ ๊ฐ์ ํด๋ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด ์ก๋ค.
~/mysite db.sqlite3 manage.py # Django ๊ด๋ จ ๋ช ๋ น ์คํ ํ์ผ mysite/ __init__.py settings.py # project๊ด๋ จ setting ํ์ผ asgi.py wsgi.py urls.py # url Dispatcher ๊ด๋ จ ํจํด ์ ๋ณด ๊ด๋ฆฌ ํ์ผ
project ๊ด๋ จ ์์ ์ ์ด ๊ตฌ์กฐ๋ด์์ ์์ ์ด ์งํ๋๋ค.
python manage.py runserver
runserver ์ ๋ค์ด ip:port ๋๋ port ์ต์ ์ ์ง์ ํ ์ ์์ผ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก localhost:8000 ์ฌ์ฉํ๋ค.
mysite/mysite/settings.py ์ DATABASES ๋ฆฌ์คํธ๋ฅผ ์์ ํ๋ค.
// Django ๊ธฐ๋ณธ๊ฐ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } ์ด๋ฅผ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝ ๋๋ ์๋ ๋ด์ฉ์ ์ ์ฅํ py ํ์ผ์ import ํ์ฌ DATABASES์ ๋์ ํ๋ฉด ๋จ. DATABASES = { 'default' : { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'MYSITE', 'USER': 'root', 'PASSWORD':'*******', 'HOST': 'localhost', 'PORT': '3306', } }
Database ๊ด๋ จ ์ค์ ์ด ๋๋๋ฉด Django ๊ฐ Database๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ Table ์์ฑ์ ํ ์ ์๋๋ก ์๋ ๋ช ๋ น ์คํ
python manage.py migrate // data migration์ ํ์ํ table์ db์ ๋ง๋๋ ๋ช ๋ น
mysql ์ ์ ์ํ์ฌ 'MYSITE' database ์ ์๋ table ์ ๋ณด๋ฅผ ํ์ธํ๋ฉด django ๊ด๋ จ table์ด ์ถ๊ฐ๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
python startapp app์ด๋ฆ
์ ๋ช ๋ น์ผ๋ก App ํด๋ ๋ฐ ํ์ผ๋ค์ ๋ง๋ค ์ ์๋ค. ๋๋ App "polls" ๋ฅผ ์์ฑํ์ผ๋ฉฐ ์๋์ ๊ฐ์ ํด๋ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด ์ก๋ค.
~/mysite db.sqlite3 manage.py mysite/ polls/ __init__.py admin.py # ๊ด๋ฆฌ์ ๊ด๋ จ ์์ ๊ด๋ฆฌ apps.py migrations/ __init__.py models.py # Database์ data ์ฐ๊ณ tests.py # test ๊ด๋ จ ํ์ผ views.py # ์ฌ์ฉ์ ์์ฒญ์ ๋ํด Data๋ฅผ ๊ฐ๊ณตํ๋ ๋ฑ์ ์์ ์ ํ๋ ํ์ผ
polls/views.py์ ์๋์ ๊ฐ์ ์ฝ๋ ์์ฑ
from django.http import HttpResponse def index(request): return HttpResponse("Hello, world. You're at the polls index.")
index ํจ์๊ฐ ํธ์ถ๋๋ฉด ๊ฐ๋จํ ์ธ์ฌ๋ง์ Http๋ก ์๋ตํ๋ ์ฝ๋์ด๋ค. ์ด์ index๊ฐ ์ฌ์ฉ์์ ์ด๋ค ์์ฒญ์ ํธ์ถ๋์ด์ผ ํ๋์ง์ ๋ํด URL ๋งค์นญ์ ํด์ผ ํ๋ค.
App ํด๋์ urls.py๋ฅผ ์ถ๊ฐํ๋ค ์๋์ ๊ฐ์ด ์ฝ๋ฉํ๋ค.
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ]
๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ Project์ urls.py์ ๋ฐ์ํด์ค์ผ ํ๋ค. mysite/urls.py์ ์๋์ ๊ฐ์ด ์ฝ๋ฉํ๋ค.
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('polls/', include('polls.urls')), path('admin/', admin.site.urls), ]
์์์ 'polls/' url์ pollsํด๋์ urls.py๋ฅผ include()ํตํด ์ฐ๊ฒฐํ๊ณ ์๋ค.
http://localhost:8000/polls ๋ก ์ ์ํ๋ฉด polls/views.py์ index()๊ฐ ํธ์ถ๋์ด ์ธ์ฌ๋ง์ http์๋ต์ผ๋ก ์ฃผ๊ฒ ๋๋ค.
๋ณด๋๋ฐ์ ๊ฐ์ด views.py์ index() ๊ฐ ๋ฆฌํดํ๋ ์ธ์ฌ๋ง์ด ํ์ถ๋๋ค.
polls/urls.py์์ indexํจ์์ ๋ํด URLConf ์ค์ ์งํ์ path์ ์ฒซ๋ฒ์งธ argument๋ฅผ ๋น์๋์๊ธฐ์ ์ url์ index๋ฅผ ํธ์ถํด์ผ ํ๋๊ฒ์ผ๋ก ์ธ์ํ ๊ฒ์ด๋ค. ๋ง์ฝ ๋ณ๋ ์ด๋ฆ์ด ๋ค์ด๊ฐ๋ค๋ฉด url ๊ฒฝ๋ก๋ ํ๋ ค์ง๋ค. ์๋ฅผ ๋ค์ด "welcome"์ด๋ ๊ฒฝ๋ก๋ช ์ ๋ฃ์๋ค๊ณ ํ๋ค๋ฉด...urlpatterns = [ path('welcome', views.index, name='index'), ]
๊ฒฝ๋ก๋ ์ด๋ ๊ฒ ๋ฐ๋๊ฒ ๋๋ค.
์ฐธ๊ณ ๋ก mysite/urls.py ์์ ๋ดค๋ admin ๊ฒฝ๋ก๊ฐ ๋ณ๋๋ก ์๋ค. ์ด๋ Django์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ ๊ด๋ฆฌ์ ํ์ด์ง์ด๋ฉฐ ํธ์ถ์ ์๋์ ๊ฐ์ด ํ์ถ
์ฐธ๊ณ ๋ก admin ํ์ด์ง๋ฅผ ์ฌ์ฉํ๊ธฐ์ํด์ ๊ด๋ฆฌ์ ๊ณ์ ์ ๋ง๋ค์ด ์ค์ผ ํ๋ค.
./manage.py createsuperuser
๋ช ๋ น ์คํ๋๋ฉด username, email, password ๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.