๐Ÿ”ฅ ์žฅ๊ณ  ํŠœํ† ๋ฆฌ์–ผ ์ง„ํ–‰ํ•ด๋ณด๊ธฐ1

may_soouuยท2020๋…„ 8์›” 26์ผ
1

Django

๋ชฉ๋ก ๋ณด๊ธฐ
1/9

์žฅ๊ณ ,, ๋„ˆ๋ฌด ์–ด๋ ต๋‹ค. ๋”ฐ๋ผ ์น˜๊ธฐ๋งŒ ํ•˜๋Š” ์ค‘์ธ๋ฐ ์–ด๋–ป๊ฒŒ ์ดํ•ด๋ฅผ ํ•ด์•ผํ• ์ง€ ๋ง‰๋ง‰ํ•ด์„œ ๋ฒจ๋กœ๊ทธ ์ •๋ฆฌํ•˜๋ฉด์„œ ๋‹ค์‹œ ํŠœํ† ๋ฆฌ์–ผ์„ ์ง„ํ–‰ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

๋ฏธ๋‹ˆ์ฝ˜๋‹ค3์ด ๊น”๋ ค์žˆ๋‹ค๋Š” ์ „์ œํ•˜์— ์ •๋ฆฌํ•˜์˜€๋‹ค.

์žฅ๊ณ ๋ž€????

Django๋Š” python์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ฌด๋ฃŒ ์˜คํ”ˆ ์†Œ์Šค ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค

1. set up

1.1 ๊ฐ€์ƒํ™˜๊ฒฝ

conda create -n myenv python=3.8 django
 # ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ƒ์„ฑ ์‹œ ํŒŒ์ด์ฌ ๋ฒ„์ „์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด conda์—
   ๊ธฐ๋ณธ์œผ๋กœ ํฌํ•จ๋œ ํŒŒ์ด์ฌ ๋ฒ„์ „์œผ๋กœ ์‹คํ–‰ ๋จ ! 
   
conda env list
 # ๊ฐ€์ƒ ํ™˜๊ฒฝ ๋ฆฌ์ŠคํŠธ ๋ณด๊ธฐ
 # ๊ฐ€์ƒ ํ™˜๊ฒฝ ์˜†์— *์ด ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค.
--------------------
# conda environments:
#
base                  *  /Users/soohyunlee/miniconda3
django_first             /Users/soohyunlee/miniconda3/envs/django_first
mysite                   /Users/soohyunlee/miniconda3/envs/mysite
--------------------
 
conda activate "๊ฐ€์ƒํ™˜๊ฒฝ์ด๋ฆ„"
 # ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”. ํ™œ์„ฑํ™” ์‹œํ‚จ ํ›„ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.
 
conda install django
 # ์žฅ๊ณ  ์„ค์น˜
 
python -m django --version
 # ์žฅ๊ณ  ๋ฒ„์ „์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด

2. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž! ์žฅ๊ณ  ํŠœํ† ๋ฆฌ์–ผ1

django-admin startproject mysite
 # ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— mysite ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
 # ๋‚˜๋Š” mysite๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์ด๋ฆ„์ธ mysite1 ์œผ๋กœ ์ƒ์„ฑ
 
ํ„ฐ๋ฏธ๋„์— tree ์ž…๋ ฅ
 > tree ๋Š” ๋”ฐ๋กœ ์„ค์น˜ํ•ด์ค˜์•ผ ํŠธ๋ฆฌ๊ตฌ์กฐ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค
 (์„ค์น˜๋ฐฉ๋ฒ•:brew install tree > brew ์„ค์น˜ ์•ˆ๋˜์–ด ์žˆ์œผ๋ฉด homebrew ๋จผ์ €!) 
 ์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ํŠธ๋ฆฌ ๊ตฌ์กฐ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์„œ๋ฒ„ ๋™์ž‘ ํ™•์ธ

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

python manage.py runserver
 # ์„œ๋ฒ„ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ

์ด์ƒ ์—†๋‹ค๋ฉด control + c ๋ˆŒ๋Ÿฌ์„œ ๋‚˜์˜ค๋ฉด ๋œ๋‹ค.
http://127.0.0.1:8000 ๋ฅผ ์—ด๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.
8000๋ฒˆ์€ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ด ์•ˆ๋˜๋ฉฐ, ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด runserver 0.0.0.0:8080 ์œผ๋กœ ์ ‘์†ํ•ด์•ผํ•œ๋‹ค.

4. ์„ค๋ฌธ ์กฐ์‚ฌ ์•ฑ ๋งŒ๋“ค๊ธฐ

4-1. ์•ฑ ์ƒ์„ฑ

python manage.py startapp polls
 # polls ๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ app ์ƒ์„ฑ 
 # ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋ฉฐ ์œ„์˜ ํŠธ๋ฆฌ๊ตฌ์กฐ ๊ธฐ์ค€ mysite ์—์„œ ์ž…๋ ฅ
 
  ๐ŸŒˆ ํ”„๋กœ์ ํŠธ vs ์•ฑ ์ฐจ์ด๋Š”?
     * ํ”„๋กœ์ ํŠธ : ํ•˜๋‚˜์˜ ์›น ์‚ฌ์ดํŠธ๋ผ๊ณ  ๋ณด๋ฉด ๋จ
      django-admin startproject ํŒŒ์ผ๋ช… : ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
      
     * ์•ฑ : ์›น ์‚ฌ์ดํŠธ ์•ˆ์— ์žˆ๋Š” ๊ธฐ๋Šฅ(ex. ๋„ค์ด๋ฒ„ ๋‚ด ๋ธ”๋กœ๊ทธ, ๋‰ด์Šค)
        : ์•ฑ์€ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค
      ./manage.py startapp commnunity : ์•ฑ ์ƒ์„ฑ

tree ํ™•์ธ

โ”œโ”€โ”€ db.sqlite3
โ”œโ”€โ”€ manage.py
โ”œโ”€โ”€ mysite1
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ __pycache__
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.cpython-38.pyc
โ”‚   โ”‚   โ”œโ”€โ”€ settings.cpython-38.pyc
โ”‚   โ”‚   โ”œโ”€โ”€ urls.cpython-38.pyc
โ”‚   โ”‚   โ””โ”€โ”€ wsgi.cpython-38.pyc
โ”‚   โ”œโ”€โ”€ asgi.py
โ”‚   โ”œโ”€โ”€ settings.py
โ”‚   โ”œโ”€โ”€ urls.py
โ”‚   โ””โ”€โ”€ wsgi.py
โ””โ”€โ”€ polls
    โ”œโ”€โ”€ __init__.py
    โ”œโ”€โ”€ admin.py
    โ”œโ”€โ”€ apps.py
    โ”œโ”€โ”€ migrations
    โ”‚   โ””โ”€โ”€ __init__.py
    โ”œโ”€โ”€ models.py
    โ”œโ”€โ”€ tests.py
    โ””โ”€โ”€ views.py

4-2. ๋ทฐ ์ž‘์„ฑ

cd polls 
 #polls ํŒŒ์ผ๋กœ ๊ฐ€์ค˜
 
vim views.py
 # views ํŒŒ์ผ ์—ด์–ด์ค˜

์•„๋ž˜ ๋‚ด์šฉ ์ž…๋ ฅ

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")
i ์ž…๋ ฅํ•ด์„œ ์ˆ˜์ • ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ 
> ๋‹ค ์ž…๋ ฅํ•˜๋ฉด : W Q ์ฐจ๋ก€๋กœ ์ž…๋ ฅํ•ด์„œ ์ €์žฅ ๋ฐ ๋‹ซ๊ธฐ

view๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด url์— ๋งคํ•‘์„ ํ•ด์•ผํ•œ๋‹ค.
polls/urls.py์—์„œ ์•„๋ž˜ ๋‚ด์šฉ ์ž…๋ ฅ

from django.urls import path

from . import views

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

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),
]

Include ๋Š” url์„ ํฌํ•จํ•  ๋•Œ ํ•ญ์ƒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
url() ํ•จ์ˆ˜๋Š” regex์™€ viewํ•จ์ˆ˜๊ฐ€ ํ•„์ˆ˜๋กœ ์ž…๋ ฅ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

mysite/urls.py ๋‚ด์˜ urlpatterns์— polls.urls๊ฐ€ include๋˜์—ˆ์œผ๋ฉฐ, ์›น์—์„œ polls/๋ผ๋Š” url ๋กœ ๋“ค์–ด๊ฐ€๋ฉด view.index๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

python manage.py runserver
 # ์ž…๋ ฅํ•ด์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ
profile
back-end ๊ฐœ๋ฐœ์ž

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