๐ŸŒฑ ์›น/Django

Django ํŠœํ† ๋ฆฌ์–ผ (1) - ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ View ์ž‘์„ฑ

๋ฏธ์ธ์ฃผ 2023. 2. 19. 19:00

โœ… ๊ณต์‹๋ฌธ์„œ

https://docs.djangoproject.com/en/4.1/

 

โฌ‡๏ธ Django ์„ค์น˜ ์ „์ด๋ผ๋ฉด ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ ํ•ด๋ณด์„ธ์š”!

 

๋งฅ(Mac)์—์„œ Django ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ฐ ์„ค์น˜ํ•˜๊ธฐ

๊ฐœ๋ฐœํ™˜๊ฒฝ macbook pro (2019) macOS Monterey 12.6.2 python 3.9.6 django 4.1.6 python3 ์„ค์น˜ 1. ์„ค์น˜ ์—ฌ๋ถ€ ํ™•์ธ python3 --version 2. ์„ค์น˜๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ์„ค์น˜ python ๊ณต์‹ ๋‹ค์šด๋กœ๋“œ (3.9.6์œผ๋กœ ์„ค์น˜ํ•จ) https://www.python.org/do

myminju.tistory.com

 

https://static.djangoproject.com/img/logos/django-logo-negative.1d528e2cb5fb.png

 

๊ฐœ๋ฐœํ™˜๊ฒฝ

  • macbook pro (2019)
  • macOS Monterey 12.6.2
  • python 3.9.6
  • django 4.1.6

Writing your first Django app

์žฅ๊ณ  ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

django-admin startproject mysite

 

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ ํŒŒ์ผ ๋ชฉ๋ก

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
  • mysite/ : ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ด๋Š” ์ปจํ…Œ์ด๋„ˆ ํด๋”, ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์ด๋ฉฐ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
    • manage.py : ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์žฅ๊ณ  ํ”„๋กœ์ ํŠธ์™€ ์ƒํ˜ธ์ž‘์šฉ ํ•˜๋Š” ์ปค๋งจ๋“œ๋ผ์ธ ์œ ํ‹ธ๋ฆฌํ‹ฐ - manage.py์— ๋Œ€ํ•œ ๋””ํ…Œ์ผ
    • ๋‚ด๋ถ€ mysite/ : ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ์‹ค์ œ ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€๋“ค์ด ์ €์žฅ๋จ
      • __init__.py : ํŒŒ์ด์ฌ์—๊ฒŒ ์ด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€๋กœ ์ธ์‹ํ•˜๋„๋ก ํ•˜๋Š” ๋น„์–ด์žˆ๋Š” ํŒŒ์ผ
      • settings.py : ํ”„๋กœ์ ํŠธ์˜ setting๊ณผ configuration  - Django settings
      • ursl.py : ํ”„๋กœ์ ํŠธ์˜ url ์„ ์–ธ
      • asgi.py : ASGI ํ˜ธํ™˜ ์›น์— ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ
      • wsgi.py : WSGI ํ˜ธํ™˜ ์›น์— ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ

 

๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰

python manage.py runserver
  • ์–ธ์ œ runserver๋ฅผ ํ•ด์•ผํ• ๊นŒ?
    ์ž๋™ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•ด ๊ฐœ๋ฐœ ์„œ๋ฒ„๋Š” ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
    ์ฆ‰, ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ตณ์ด ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
    ๊ทธ๋Ÿฌ๋‚˜, ํŒŒ์ผ ์ถ”๊ฐ€ ๋“ฑ์˜ ์ž‘์—…์€ ๊ฐœ๋ฐœ์„œ๋ฒ„๊ฐ€ ์ž๋™์œผ๋กœ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค.

์„ค๋ฌธ์กฐ์‚ฌ ์•ฑ ์ƒ์„ฑ

python manage.py startapp polls

๐Ÿ’ก ํ”„๋กœ์ ํŠธ vs ์•ฑ

  • ์•ฑ์€ ๋ธ”๋กœ๊ทธ ์‹œ์Šคํ…œ, ๊ณต๊ณต ๊ธฐ๋ก ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜๋Š” ์†Œ๊ทœ๋ชจ ํˆฌํ‘œ ์•ฑ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • ํ”„๋กœ์ ํŠธ๋Š” ํŠน์ • ์›น ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ๋ฐ ์•ฑ์˜ ๋ชจ์Œ
  • ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ๋Ÿฌ ์•ฑ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ณ , ์•ฑ์€ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์— ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

 

์•ฑ ์ƒ์„ฑ ํ›„ ํŒŒ์ผ ๋ชฉ๋ก

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

์ฒซ๋ฒˆ์งธ ๋ทฐ ๋„์šฐ๊ธฐ

1. polls/views.py์— ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€

# polls/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

 

2. polls/urls.py์— URL ๋งคํ•‘

๋ทฐ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด ์ด์™€ ์—ฐ๊ฒฐ๋œ URL์ด ์žˆ์–ด์•ผ ํ•˜๊ณ , ์ด๋ฅผ ์œ„ํ•ด URLConf๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

 

3. mysite/urls.py์—์„œ ๋ชจ๋“ˆ ๊ฐ€๋ฆฌํ‚ค๊ธฐ

์ตœ์ƒ์œ„ URLConf์—์„œ polls.urls ๋ชจ๋“ˆ์„ ๋ฐ”๋ผ๋ณด๊ฒŒ ์„ค์ •ํ•œ๋‹ค.

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

๐Ÿ’ก include()

๋‹ค๋ฅธ URLConf๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ํ•จ

URL์ด ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ์ž˜๋ผ๋‚ด๊ณ  ๋‚จ์€ ๋ถ€๋ถ„์„ included URLConf๋กœ ๋ณด๋ƒ„

 

๐Ÿ’ก path()

ํ•„์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ : route, view

์„ ํƒ ํŒŒ๋ผ๋ฏธํ„ฐ : kwargs, name

 

4. http://localhost:8000/polls/ ์— ์ ‘์†ํ•˜์—ฌ ์—ฐ๊ฒฐ ํ™•์ธํ•˜๊ธฐ

index ๋ทฐ๊ฐ€ URLConf์— ์—ฐ๊ฒฐ๋˜์–ด ์ž˜ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!