๐Ÿฅž BE
home

1. Hello World!

Date
2022/12/15
Category
Web
Tag
Django
Detail
Likelion Study
์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ

VENV ์ƒ์„ฑ & ๊ฐ€์ƒํ™˜๊ฒฝ ์‹คํ–‰

๋Œ€์ถฉ ํŒŒ์ด์ฌ pip ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „ ํ˜ธํ™˜๋ฌธ์ œ ๋•Œ๋ฌธ์— ๊ฐ€์ƒํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
๊ฐ€์ƒ ํ™˜๊ฒฝ์€ ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ pip๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๊ฐ€์ƒ ํ™˜๊ฒฝ ํด๋”(๋””๋ ‰ํ„ฐ๋ฆฌ)์˜ Lib/site-packages ์•ˆ์— ํŒจํ‚ค์ง€๋ฅผ ์ €์žฅํ•ด์ค€๋‹ค.
Django๊ฐœ๋ฐœ์„ ํ• ๋•Œ๋Š” ๋ฌด์กฐ๊ฑด! ๊ฐ€์ƒํ™˜๊ฒฝ๋ถ€ํ„ฐ ํ‚ค๊ณ  ์‹œ์ž‘ํ•˜์ž.

python -m venv ๊ฐ€์ƒํ™˜๊ฒฝ๋ช…

python -m venv myvenv
Bash
๋ณต์‚ฌ

๊ฐ€์ƒํ™˜๊ฒฝ ์‹คํ–‰ํ•˜๊ธฐ

source myvenv/Scripts/activate
Bash
๋ณต์‚ฌ
source ๋Œ€์‹  .์„ ์ž…๋ ฅํ•ด๋„ ๋œ๋‹ค.

๊ฐ€์ƒํ™˜๊ฒฝ ๋„๊ธฐ

deactivate
Bash
๋ณต์‚ฌ

Django ์„ค์น˜ํ•˜๊ธฐ

pip install django
Bash
๋ณต์‚ฌ

Django๋กœ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๊ธฐ

์ฒซ๋ฒˆ์งธ Django ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๊ธฐ

django-admin startproject myproject
Bash
๋ณต์‚ฌ
๋ช…์นญ์ด ํ—ท๊ฐˆ๋ฆฌ๋‹ˆ ์ƒ์œ„ ํด๋” ์ด๋ฆ„์„ djangoproject๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
startproject๋กœ ์ƒ์„ฑ๋œ ํŒŒ์ผ

Django ์„œ๋ฒ„ ์ž‘๋™์‹œํ‚ค๊ธฐ

python manage.py runserver
Bash
๋ณต์‚ฌ
http://127.0.0.1:8000/ ๋กœ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ์—ด์–ด๋ณด๋ฉด,
๋กœ์ผ“์ด ๋‚ ์•„๊ฐ€๋ฉฐ ์ด๋Ÿฐ ํŽ˜์ด์ง€๊ฐ€ ๋œฌ๋‹ค.
์œ„์˜ ํŽ˜์ด์ง€๊ฐ€ ๋œจ๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ์žฅ๊ณ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ์ž‘๋™์‹œํ‚จ ๊ฒƒ์ด๋‹ค.
์„œ๋ฒ„๋ฅผ ๋„๋ ค๋ฉด ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰์ค‘์ธ ํ„ฐ๋ฏธ๋„์ฐฝ์—์„œ ctrl+c ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค.

Hello World ํŽ˜์ด์ง€ ๋„์›Œ๋ณด๊ธฐ

app ๋งŒ๋“ค๊ธฐ

app์€ ์•„๊นŒ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์„ฑ ๋‹จ์œ„์ด๋‹ค. app์ด ํ”„๋กœ์ ํŠธ์˜ ์ž‘์€ ๋ถ€๋ถ„๋“ค์ด๊ณ , app์ด ๋ชจ์ธ๊ฒƒ์ด project๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด๋œ๋‹ค.
(app์„ ๋งŒ๋“ค๋•Œ ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ž˜ ํ™•์ธํ•˜์ž. app์€ ์–ด๋””์— ๋งŒ๋“ค์–ด๋„ ์ƒ๊ด€์—†์ง€๋งŒ, ํŽธ์˜๋ฅผ ์œ„ํ•ด manage.py๊ฐ€ ์žˆ๋Š” ํด๋”์—์„œ ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.)
python manage.py startapp myapp
Bash
๋ณต์‚ฌ
ํ˜„์žฌ๊นŒ์ง€ ๋งŒ๋“ค์–ด์ง„ ํด๋” ๋ฐ ํŒŒ์ผ๋“ค
hello ํด๋” ์•ˆ์—์„œ ์ผ๋‹จ ์•Œ์•„์•ผ ํ•  ํŒŒ์ผ์€ views.py ์ด๋‹ค. ์•ž์œผ๋กœ ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์ˆœ์„œ์— ๋”ฐ๋ผ ์ž‘์—…ํ•ด์•ผํ•œ๋‹ค๊ณ  ์™ธ์›Œ๋‘์ž.
1.
settings.py โ‡’ project์—๊ฒŒ app์˜ ์กด์žฌ ์•Œ๋ฆฌ๊ธฐ
2.
templates โ‡’ views.py์—์„œ ์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™”๋ฉด์„ ๋ณด์—ฌ์คŒ
3.
views.py โ‡’ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜ ์ž‘์„ฑ
4.
urls.py โ‡’ ์š”์ฒญ์— ๋งž๋Š” ํ•จ์ˆ˜๋ฅผ views.py์—์„œ ์ฐพ์•„ ์š”์ฒญ ์ „๋‹ฌ
settings.py โ†’ templates โ†’ views.py โ†’ urls.py ์ˆœ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—…์„ ํ•˜๋ฉด๋œ๋‹ค.

1. project์— app์˜ ์กด์žฌ ์•Œ๋ฆฌ๊ธฐ : settings.py

myapp์ด๋ผ๋Š” app์„ ๋งŒ๋“ค์—ˆ์ง€๋งŒ project๋Š” ๊ทธ app์˜ ์กด์žฌ๋ฅผ ์•„์ง ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— app์„ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๋“ฑ๋กํ•ด์ฃผ๋Š” ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. settings.pyํŒŒ์ผ์„ ์—ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์˜์—ญ์ด ์žˆ๋‹ค.
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
Python
๋ณต์‚ฌ
์—ฌ๊ธฐ์— ๋งŒ๋“  app์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
INSTALLED_APPS = [ 'myapp.apps.MyappConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
Python
๋ณต์‚ฌ
myapp.apps.MyappConfig ๋ผ๊ณ  ์ ์–ด์ค€๋‹ค.
myapp ํด๋” ์•ˆ์„ ๋ณด๋ฉด apps.py๋ผ๋Š” ํŒŒ์ผ์ด ์žˆ๊ณ , ๊ทธ ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด MyappConfig ๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๋“ฑ๋กํ•ด์ฃผ๋Š” ์ ˆ์ฐจ์ด๋‹ค.
ํŒ

2. Template ๋งŒ๋“ค๊ธฐ

template์€ ์œ ์ €๊ฐ€ ๋ณด๋Š” ํ™”๋ฉด์ด๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. appํด๋”์•ˆ์— templates๋ผ๋Š” ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— htmlํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

3. ์•ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ : views.py์— ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ

app์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด ์ด views.py์ด๋‹ค. ์—ด์–ด๋ณด๋ฉด from์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” import ๊ตฌ๋ฌธ๊ณผ ์ฃผ์„์ด ์žˆ๋‹ค. ์•„๋ž˜์— ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.
from django.shortcuts import render # Create your views here. def home(request): return render(request, 'home.html')
Python
๋ณต์‚ฌ
์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด home.html ํŒŒ์ผ์„ ์—ด์–ด์ฃผ๋Š” home์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค. html ํŒŒ์ผ(template)์„ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋Ÿฐ ํ•จ์ˆ˜์˜ ๊ตฌ์กฐ๊ฐ€ ๊ธฐ๋ณธ์ด ๋œ๋‹ค.

4. URL ์š”์ฒญ์„ views์— ์—ฐ๊ฒฐํ•˜๊ธฐ : urls.py

myproject ํด๋” ์•ˆ์˜ urls.py๋ฅผ ์—ด๋ฉด ๋‹ค์Œ์˜ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค.
from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ]
Python
๋ณต์‚ฌ
์šฐ์„  views.py๋ฅผ ์ฝ์–ด์™€์•ผ ํ•˜๋‹ˆ import๋ฅผ ํ•ด์ค€๋‹ค.
from django.contrib import admin from django.urls import path import myapp.views urlpatterns = [ path('admin/', admin.site.urls), ]
Python
๋ณต์‚ฌ
hello.views๋Š” helloํด๋”์•ˆ์— views ํŒŒ์ผ์ด๋ผ๋Š” ๋œป์ด๋‹ค. ์ด๋ ‡๊ฒŒ import ํ–ˆ์œผ๋ฉด urlpatterns์— path๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
urlpatterns = [ path('admin/', admin.site.urls), path('', myapp.views.home, name='home'), ]
Python
๋ณต์‚ฌ
path๋Š” 3๊ฐ€์ง€ ์ธ์ˆ˜๋ฅผ ๋ฐ›๋Š”๋‹ค. ๋จผ์ € route๋Š” ๋„๋ฉ”์ธ ๋’ค์— ๋ถ™๋Š” url ๋ถ€๋ถ„์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ๋‘๋ฒˆ์งธ๋Š” ๋‚ด๊ฐ€ ์—ฐ๊ฒฐํ•˜๊ณ  ์‹ถ์€ views์•ˆ์— ์ •์˜๋œ ํ•จ์ˆ˜์ด๋‹ค. hello ํด๋” ์•ˆ์— views ํŒŒ์ผ ์•ˆ์— home์ด๋ผ๊ณ  ์ •์˜๋œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ฒ ๋‹ค๋Š” ๋ง์ด๋‹ค.
๋งˆ์ง€๋ง‰์— ์ ํžŒ name=โ€™homeโ€™ ์€ ์ด path์˜ ์ด๋ฆ„์„ home์ด๋ผ ์ •ํ•˜๊ฒ ๋‹ค๊ณ  ์•ฝ์†์„ ํ•˜๋Š” ๋‚ด์šฉ์œผ๋กœ, ์ด๋ ‡๊ฒŒ ์•ฝ์†์„ ํ•˜๋ฉด djangoํ”„๋กœ์ ํŠธ ์–ด๋””์—์„œ๋“  home์ด๋ผ๊ณ  ๋ถˆ๋Ÿฌ์„œ ํ˜ธ์ถœํ•ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜์ด๋ฆ„๊ณผ path์˜ name์„ ์ผ์น˜์‹œ์ผœ์ฃผ๋Š”๊ฒŒ ์ •์‹ ๊ฑด๊ฐ•์— ์ด๋กญ๋‹ค.
1.
project๋ฅผ ๋งŒ๋“ค๊ณ ,
2.
app์„ ๋งŒ๋“ค๊ณ ,
3.
project์— app์„ ์—ฐ๊ฒฐํ•˜๊ณ ,
4.
app์—์„œ templates ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— htmlํŒŒ์ผ(template)์„ ๋งŒ๋“ค๊ณ ,
5.
app์—์„œ views.py๋ฅผ ๋งŒ๋“ค๊ณ ,
6.
urls.py์—์„œ templates์•ˆ์˜ htmlํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ณผ์ •์ด๋‹ค.
๊ทธ ๊ฒฐ๊ณผ..