๐Ÿ”ฅTIL#2. Django tutorial1

๋ฐฑ์Šน์ง„ยท2020๋…„ 10์›” 28์ผ
0

wecode Django ์‹ค์Šต

๋ชฉ๋ก ๋ณด๊ธฐ
2/16

์•ž์—์„œ ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์น˜์— ๋Œ€ํ•ด ์ง„ํ–‰ํ•˜์˜€๋‹ค. ์•ž์œผ๋กœ์˜ ๊ณผ์ •์€ ๊ฐ€์ƒํ™˜๊ฒฝ(์ด๋ฆ„์€ test)์—์„œ ์ง„ํ–‰๋œ๋‹ค.
์ด๋ฒˆ์—๋Š” Django tutorial1 ๊ณผ์ •์— ๋Œ€ํ•œ ์‹ค์Šต๊ณผ์ •์„ ์ •๋ฆฌํ•œ๋‹ค.

What you will learn?

  1. framework, Database ์„ค์น˜
  2. Django project ๋งŒ๋“ค๊ธฐ
  3. Server ์‹คํ–‰ ๋ฐ ํ™•์ธ
  4. Django์—์„œ mysql server ์—ฐ๋™์„ ์œ„ํ•œ ์ž‘์—…

1. framework, Database ์„ค์น˜

Django๋Š” ๊ธฐ๋ณธ์œผ๋กœ sqlite3๋ฅผ ์ œ๊ณตํ•˜๋‚˜ ๋‚˜๋Š” mysql์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์šฐ๋ถ„ํˆฌ์— mysql์„ ๋จผ์ € ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค. (pip mysqlclient ํŒจํ‚ค์ง€ ์„ค์น˜์™€์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค)

mysql ์„ค์น˜๋Š” ์—ฌ๊ธฐ ๋ฅผ ์ฐธ์กฐ.

mysql ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉด django์™€ mysql์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์•„๋ž˜์ฒ˜๋Ÿผ ํŒจํ‚ค์ง€ ์„ค์น˜

pip install django
pip install django-cors-headers
pip install mysqlclient

2. Django project ๋งŒ๋“ค๊ธฐ

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 ๊ด€๋ จ ์ž‘์—…์€ ์ด ๊ตฌ์กฐ๋‚ด์—์„œ ์ž‘์—…์ด ์ง„ํ–‰๋œ๋‹ค.

3. Server ์‹คํ–‰ํ•˜๊ณ  ํ™•์ธ

python manage.py runserver

runserver ์‹œ ๋’ค์–ด ip:port ๋˜๋Š” port ์˜ต์…˜์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ localhost:8000 ์‚ฌ์šฉํ•œ๋‹ค.

4. Django์—์„œ mysql server ์—ฐ๋™์„ ์œ„ํ•œ ์ž‘์—…

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์ด ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

5. App ๋งŒ๋“ค๊ธฐ(Project๊ฐ€ ํ•˜๋‚˜์˜ Site๋ผ๋ฉด App์€ Site์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.)

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๋ฅผ ๊ฐ€๊ณตํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ํ•˜๋Š” ํŒŒ์ผ

6. polls์— ๋Œ€ํ•œ view ๋งŒ๋“ค๊ธฐ

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 ๋งค์นญ์„ ํ•ด์•ผ ํ•œ๋‹ค.

7. 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 ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

profile
12๋…„ .NET ๊ฐœ๋ฐœ ๊ฒฝ๋ ฅ์„ ๊ฐ€์ง„ ์›น ์ดˆ์งœ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค :)

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