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

  • macbook pro (2019)
  • macOS Monterey 12.6.2
  • node 18.14.0 (LTS)
  • IDE : vscode

node.js ์„ค์น˜

  • node ๊ณต์‹ ๋‹ค์šด๋กœ๋“œ (LTS ์„ค์น˜)
 

Download | Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

vscode ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

  • Vetur (vue 2.x)

 

  • Volar (vue 3.x)

 

chrome ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

  • Vue.js devtools
    ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ Vue ์ฝ”๋“œ๋ฅผ ๋” ์ž˜ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์คŒ
 

Vue.js devtools

Browser DevTools extension for debugging Vue.js applications.

chrome.google.com


vue-cli

๋ทฐ๋กœ ๋น ๋ฅด๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ํ”„๋กœํ†  ํƒ€์ดํ•‘ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” CLI ๋„๊ตฌ


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

https://cli.vuejs.org/guide/installation.html

 

์„ค์น˜

  • npm(node package manager)์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ node.js๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•จ
sudo npm install -g @vue/cli

# ๋ฒ„์ „ ํ™•์ธ
vue --version

 

 

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

vue create [ํ”„๋กœ์ ํŠธ๋ช…]

โ—๏ธ ์ง„ํ–‰ ์‹œ ์ฃผ์˜ํ•  ์ 
vuetify ์ถ”์ฒœ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” vue2๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค.

 

์„ค์น˜ ์™„๋ฃŒ๋ผ๊ณ  ์˜ˆ์˜๊ฒŒ ๋œฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์„ค์น˜ ํ™•์ธ

npm run serve

 

  • http://localhost:8080 ์ ‘์†


vuetify

  • vue ๊ธฐ๋ฐ˜์˜ UI ํ”„๋ ˆ์ž„์›Œํฌ
  • bootstrap์˜ ๊ฒฝ์šฐ css ์œ„์ฃผ์ด์ง€๋งŒ vuetify๋Š” js๊ฐ€ ๋งŽ์ด ํฌํ•จ๋˜์–ด ๋™์ ์ธ ์š”์†Œ๊ฐ€ ๋งŽ์Œ

 

์ ์šฉ

  • vue-cli๊ฐ€ ์„ค์น˜๋œ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•จ
vue add vuetify

 

  • recommended ์„ค์น˜

โ—๏ธ ์ง„ํ–‰ ์‹œ ์ฃผ์˜ํ•  ์ 
vuetify3๋Š” ํ”„๋ฆฌ๋ทฐ ๋ฒ„์ „์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ถ”์ฒœ ๋ฒ„์ „์ธ vuetify2๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” vue2๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•จ!

vue3๋ฅผ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
Error: You cannot call "get" on a collection with no paths. Instead, check the "length" property first to verify at least 1 path exists.

 

์•„๋ž˜์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋˜๋ฉด ์ž˜ ์„ค์น˜๋œ ๊ฒƒ์ด๋‹ค!

 

์„ค์น˜ ํ™•์ธ

npm run serve

 

  • http://localhost:8080 ์ ‘์†

 

 

 

 

 

Reference

https://velog.io/@doobyeol/Vue-ํ”„๋กœ์ ํŠธ-๋งค๋‹ˆ์ €-Vuetify-์„ค์น˜

Vue.js

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋ ˆ์ž„์›Œํฌ

MVVM ํŒจํ„ด์˜ ๋ทฐ๋ชจ๋ธ(ViewModel) ๋ ˆ์ด์–ด์— ํ•ด๋‹นํ•˜๋Š” ํ™”๋ฉด(View)๋‹จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

  • View(html DOM) : ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ํ™”๋ฉด
  • View Model : View์™€ Model์˜ ์ค‘๊ฐ„ ์˜์—ญ์œผ๋กœ DOM Listener์™€ Data Binding์„ ์ œ๊ณตํ•˜๋Š” ์˜์—ญ
  • Model(JS) : ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋กœ ์ €์žฅ

 

  • DOM : HTML ์š”์†Œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํŠธ๋ฆฌ
  • DOM Listener : DOM ๋ณ€๊ฒฝ์— ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ฐ˜์‘ํ•˜์—ฌ ํŠน์ • ๋กœ์ง์„ ์ˆ˜ํ–‰
  • Data Binding : View์— ํ‘œ์‹œ๋˜๋Š” ๋‚ด์šฉ๊ณผ ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”

 

์žฅ์ 

  • ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋‚ฎ์Œ
  • React, Angular์— ๋น„ํ•ด ๊ฐ€๋ณ๊ณ  ์„ฑ๋Šฅ์ด ๋น ๋ฆ„
  • React(Virtual DOM), Angular(๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ)์˜ ์žฅ์ ์„ ์ทจํ•จ
  • ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋ทฐ ๊ตฌ์„ฑ, ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ์‰ฌ์›€

 

๐Ÿ’ก Virtual DOM

ํ™”๋ฉด์— ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ , Virtual DOM์„ ์ด์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  DOM์„ ํ•œ๋ฒˆ๋งŒ ์ˆ˜์ •ํ•œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ Œ๋”๋ง์„ ํ•œ๋ฒˆ๋งŒ ํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ๋†’์ธ๋‹ค.

 

 

 

Reference

https://happy-jjang-a.tistory.com/114

Django๋Š” ์„ค์น˜ํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ SQLite๊ฐ€ ์—ฐ๋™๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด MySQL ์—ฐ๋™ ์ž‘์—…์„ ์ง„ํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

1. ์ปค๋„ฅํ„ฐ ์„ค์น˜

mysqlclient ๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๋ฉด ํŒŒ์ด์ฌ๊ณผ MySQL ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

pip install mysqlclient

 

2. settings.py ์„ค์ •

DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',    
        'NAME': '์—ฐ๋™ํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„',                  
        'USER': 'DB ์ ‘์† ๊ณ„์ •๋ช…',                          
        'PASSWORD': 'DB ์ ‘์† ๋น„๋ฐ€๋ฒˆํ˜ธ',                  
        'HOST': '์‹ค์ œ DB ์ฃผ์†Œ',                     
        'PORT': '3306',         # ๊ธฐ๋ณธ ํฌํŠธ ์ฃผ์†Œ                  
    }
}

 

3. DB ๊ฐ์ง€

ํ•ด๋‹น DB์— ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”๋“ค์„ model๋กœ ๋งŒ๋“ค์–ด์คŒ

# ์•ฑ ์•ˆ์— models.py์— ๋ฐ”๋กœ ์ €์žฅํ•˜๊ธฐ
python manage.py inspectdb > [์•ฑ์ด๋ฆ„]/models.py

# ์•ฑ ์•ˆ์— models.py์— ๋ฐ”๋กœ ์ €์žฅํ•˜๊ธฐ (๋ฉ€ํ‹ฐ DB)
python manage.py inspectdb --database 'db๋ช…' > [์•ฑ์ด๋ฆ„]/models.py

# ์ถœ๋ ฅ๋งŒ ํ•˜๊ธฐ
python manage.py inspectdb

 

 

4. ํ…Œ์ด๋ธ” ์ƒ์„ฑ

๋ชจ๋ธ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋‹ˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ ์šฉํ•˜๊ธฐ

python manage.py makemigrations
python manage.py migrate

 

Django ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์…‹์—…

๊ธฐ๋ณธ์œผ๋กœ ์„ค์น˜๋˜์–ด ์žˆ๋Š” SQLite๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • SQLite ์ง„์ž…
# db.sqlite3 ๊ฐ€ ์žˆ๋Š” ์œ„์น˜์—์„œ
sqlite3 db.sqlite3

 

๋ชจ๋ธ ๋งŒ๋“ค๊ธฐ

๋ชจ๋ธ์ด๋ž€, ๋ถ€๊ฐ€์ ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ!

 

1. polls/models.py์—์„œ ๋ชจ๋ธ ์ž‘์„ฑ

Question๊ณผ Choice ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ ๋‹ค.

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

 

๋ชจ๋ธ ํ™œ์„ฑํ™”

๋ชจ๋ธ์„ ํ†ตํ•ด ์žฅ๊ณ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์„ ํ•œ๋‹ค.

  • ์ด ์•ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ์ƒ์„ฑ (CREATE TABLE statements)
  • Question์™€ Choice ๊ฐ์ฒด์— ๋Œ€ํ•œ ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ API ์ƒ์„ฑ

 

2. mysite/settings.py ์ˆ˜์ •

ํ”„๋กœ์ ํŠธ์— polls ์•ฑ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์•ผ ํ•œ๋‹ค.

INSTALLED_APPS์— PollsConfig ํด๋ž˜์Šค ์ถ”๊ฐ€

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

 

3. ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ƒ์„ฑ

๋ชจ๋ธ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์žฅ๊ณ ์— ์•Œ๋ฆฌ๋Š” ๊ฒƒ

python manage.py makemigrations

๐Ÿ’ก ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด๋ž€? Migrations

์žฅ๊ณ ์—์„œ ๋ชจ๋ธ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์— ์ „ํŒŒํ•˜๋Š” ๋ฐฉ๋ฒ•

์žฅ๊ณ ๋Š” ORM์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ DB ์Šคํ‚ค๋งˆ๋ฅผ git์ฒ˜๋Ÿผ ๋ฒ„์ „ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ

ํ•˜๋‚˜์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ์€ ํ•ด๋‹น ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์ƒ์„ฑ๋œ ์‹œ์ ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง

 

4. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉ

๋ชจ๋ธ๊ณผ ๊ด€๋ จ๋œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•œ๋‹ค.

python manage.py migrate

 

๐Ÿง ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ช…๋ น๊ณผ ์ ์šฉํ•˜๋Š” ๋ช…๋ น์ด ๋ถ„๋ฆฌ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ปค๋ฐ‹ํ•˜๊ณ  ์•ฑ๊ณผ ํ•จ๊ป˜ ์ถœ์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

 

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

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์— ์—ฐ๊ฒฐ๋˜์–ด ์ž˜ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!

+ Recent posts