25 Fri

TIL

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค AI ์Šค์ฟจ 1๊ธฐ] 4์ฃผ์ฐจ DAY 3

django I - What is

Flask์™€๋Š” ๋˜๋‹ค๋ฅธ ์›น ํ”„๋ ˆ์ž„์›Œํฌ ์žฅ๊ณ . Python ๊ธฐ๋ฐ˜ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ด๋ฉฐ Pinterest๋‚˜ Instagram์€ ์žฅ๊ณ ๋กœ ๋งŒ๋“ค์–ด์ง.

flask vs django

๋ฐฉํ–ฅ์„ฑ์ด ๋‹ค๋ฅด๋‹ค.

flask : micro๋ผ๋Š” ๋ง์ด ๋งŽ์ด ๋ถ™๋Š”๋‹ค. ์ตœ์†Œํ•œ์˜ ๋ฒ ์ด์Šค์—์„œ ์กฐ๊ธˆ์”ฉ ์ฑ„์›Œ๋‚˜๊ฐ„๋‹ค. ์ž‘์€ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ.

django : ๋ชจ๋“  ๊ฒƒ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค. ํฐ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ.

๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์น˜ํ•˜๊ธฐ

virtualenv venv

.\venv\Scripts\activate.bat

pip install django

django-admin startproject webproj

cd webproj

python manage.py runserver

http://127.0.0.1:8000/ ๋กœ ์ด๋™ ํ›„ ์•„๋ž˜ ํ™”๋ฉด์ด ๋œจ๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ

django ๊ตฌ์„ฑ์š”์†Œ

manage.py : ์žฅ๊ณ ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํŒŒ์ผ์ด๋ฉฐ ์‹ค์ œ๋กœ๋Š” python - manage.py - runserver์˜ ์ˆœ์„œ๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋œ๋‹ค.

__init__.py : python ๋ชจ๋“ˆ๋กœ์จ ์ธ์‹๋˜๊ฒŒ ํ•˜๋Š” ํŒŒ์ผ

asgi.py, wsgi.py : ์žฅ๊ณ ์—์„œ ์„œ๋ฒ„๋ฅผ ์šด์šฉํ•  ๋•Œ ๋‹ค๋ฃจ๋Š” ํŒŒ์ผ

settings.py : ์ „๋ฐ˜์ ์ธ ์žฅ๊ณ  ํ”„๋กœ์ ํŠธ์— ์„ค์ • ํŒŒ์ผ์„ ๋ฐ˜์˜

  • secret key

  • debug = True : python ํ”„๋กœ์ ํŠธ๋ฅผ ๋””๋ฒ„๊น… ๋ชจ๋“œ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ

  • allowed_hosts : ์–ด๋– ํ•œ ์ฃผ์†Œ์— ๋Œ€ํ•ด์„œ ์žฅ๊ณ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅ

  • installed_apps :์žฅ๊ณ  ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ๋Ÿฌ ์•ฑ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค. ์„ค์น˜๋œ ์•ฑ ๋ชฉ๋ก

  • middle_ware

  • root_urlconf : url๊ด€๋ฆฌ๋ฅผ ์–ด๋–ค ๋ชจ๋“ˆ์—์„œ ์ง„ํ–‰ํ•  ๊ฒƒ์ธ์ง€

  • templates : ์‹ค์ œ ๋ณด๋Š” ํ™”๋ฉด์— ๊ด€ํ•œ ์š”์†Œ๋“ค์ด ๋‹ด๊ฒจ์žˆ์Œ

  • wegi_application : python์ƒ์—์„œ ์›น์„œ๋ฒ„์™€ ์†Œํ†ตํ•  ๋•Œ ํ•„์š”ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ด๋‹น

  • databases : ํ”„๋กœ์ ํŠธ ์ƒ์—์„œ ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋‹นํ•  ๊ณณ. default๋Š” sqlite3

  • auth_password_validation : ๊ด€๋ฆฌ์ž๊ฐ€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณณ

  • language_code

  • time_zone

  • use_i18n

  • use_l10n

  • use_tz

  • static_url : css, js, images ๋“ฑ์˜ ์ •์  ํŒŒ์ผ๋“ค์„ ์–ด๋А ํด๋”์— ๋‹ด์•„๋‘˜์ง€ ๊ฒฐ์ •

=> setting๋งŒ ๋ด๋„ ํ”Œ๋ผ์Šคํฌ๋ณด๋‹ค ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋Šฅ์„ ์ ์ ˆํ•˜๊ฒŒ ํ™œ์šฉํ•˜๋ฉด ์ •๋ง ๋น ๋ฅด๊ฒŒ ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

urls.py : url์„ ๊ด€๋ฆฌ

  • urlpatterns : path('a', b) => 'a' ๋ผ๋Š” ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์€ b์—์„œ ๋‹ด๋‹นํ•œ๋‹ค.

django Project and App

ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์•ฑ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์•ฑ์€ ํŠน์ • ๋ทฐ๋‚˜ ํ…œํ”Œ๋ฆฟ์˜ ๋ชจ์Œ.

ex) ์Šคํฌ์ธ  ์•ฑ, ๋ธ”๋กœ๊ทธ ์•ฑ ๋“ฑ

django App ๋งŒ๋“ค๊ธฐ

์ด์ „๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์ƒ์œ„ ํด๋”์—์„œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ•ด๋‹น ํด๋”์—์„œ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

django-admin startapp homepage

__init__.py : python ๋ชจ๋“ˆ๋กœ์จ ์ธ์‹๋˜๊ฒŒ ํ•˜๋Š” ํŒŒ์ผ

admin.py : admin ํŽ˜์ด์ง€์— ๊ด€ํ•œ ๋ถ€

apps__init__.py : ์•ฑ์— ๋Œ€ํ•œ ์„ค์ •์„ ๊ด€

models.py : ํ™ˆํŽ˜์ด์ง€ ๋ชจ๋“ˆ์—์„œ ์“ฐ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์Šคํ‚ค๋งˆ๋ฅผ ํด๋ž˜์Šค ํ˜•ํƒœ๋กœ ์ •

tests.py : ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์„ค๋ช…

views.py : ๋ทฐ ๊ด€

django์˜ MVT Pattern

๋””์ž์ธ ํŒจํ„ด : ์ฝ”๋“œ์˜ ๋ชจ๋“ˆํ™”๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ ์ฝ”๋“œ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•ด์„œ ์œ ๊ธฐ์ ์œผ๋กœ ์›ํ•˜๋Š” ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ตฌ์กฐ

์žฅ๊ณ ๋Š” MVT ํŒจํ„ด์„ ์ฑ„ํƒํ–ˆ๋‹ค. Model View Template. MVC(Controller)๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์žฅ๊ณ ๋งŒ์˜ ๋””์ž์ธ ํŒจํ„ด ์ฑ„ํƒ. ์œ ์ €๊ฐ€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋ณด๋‚ด๋ฉด ์žฅ๊ณ (์„œ๋ฒ„)๋Š” URL(urls,py)์„ ์ฒดํฌํ•˜์—ฌ ์–ด๋–ค ๊ฒฝ๋กœ๋กœ ์š”์ฒญ์ด ์™”๋Š”์ง€ ํŒŒ์•…ํ•˜๊ณ  View(views.py)์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด ๋•Œ DB๋ฅผ ๊ด€๋ฆฌ ๋ฐ ์†Œํ†ต์„ Model์—์„œ ๋‹ด๋‹นํ•œ๋‹ค. ์žฅ๊ณ ๋Š” DB๋ฅผ ORM ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. Object Relational Mapping. ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด DB์— CRUD ์ ‘๊ทผ ๊ฐ€๋Šฅ. ์›น ํŽ˜์ด์ง€๋‚˜ ์›น ๋ฌธ์„œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์š”์ฒญ์€ Template์—์„œ ๊ด€๋ฆฌํ•˜๋ฉฐ .html ํŒŒ์ผ ๋“ฑ์œผ๋กœ ์ „๋‹ฌํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ template ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ html์€ ๋กœ์ง์ด๋‚˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ–‰์œ„๋Š” ํ•  ์ˆ˜ ์—†์ง€๋งŒ template์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด html์— ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ–‰์œ„๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

django II - View

View๋กœ Request Handling ํ•˜๊ธฐ

View๋Š” model๊ณผ ์†Œํ†ตํ•˜๊ธฐ๋„ ํ•˜๊ณ  template๊ณผ ์†Œํ†ตํ•˜๊ธฐ๋„ ํ•œ๋‹ค. View๋Š” ์žฅ๊ณ ์—์„œ ์ค‘์ถ”์ ์ธ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š”๋ฐ, url์ด ์ „์†ก๋˜๋ฉด url์˜ ์š”์ฒญ์„ ์‹ค์ œ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณณ.

views.py

urls.py

setting.py

1. ์‚ฌ์šฉ์ž๊ฐ€ http://127.0.0.1:8000 ์— ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

2. urls.py์—์„œ urlpatterns์„ ์ฐธ์กฐํ•˜์—ฌ ํ•ด๋‹น url์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

3. ์ด ํ›„ views.py์—์„œ index ํ•จ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

ํ•ด๋‹น ์ฃผ์†Œ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŽ˜์ด์ง€๊ฐ€ ์—ด๋ฆฐ๋‹ค.

python manage.py createsuperuser

์ดˆ๊ธฐ์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ migration์ด ์ง„ํ–‰๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ.

python manage.py migrate

default๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๋ณด๊ฐ€ ๋ฐ˜์˜๋œ๋‹ค. ์žฅ๊ณ  ํ”„๋กœ์ ํŠธ์— ๋””๋น„ ์ •๋ณด๊ฐ€ ์ž˜ ์—ฐ๋™๋œ ๊ฒƒ์ด๋ฉฐ ์ด ๋•Œ ๊ด€๋ฆฌ์ž ๊ณ„์ •์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ดํ›„ ๋งŒ๋“  ๊ด€๋ฆฌ์ž ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŽ˜์ด์ง€๊ฐ€ ์—ด๋ฆฐ๋‹ค.

์ด๋ฅผ flask์—์„œ ์ง„ํ–‰ํ•˜๋ฉด ์ง์ ‘ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด์•ผ ๋˜์ง€๋งŒ, django๋Š” default template๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋ฏธ authentication ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์˜€์Œ.

django III - Template

view๋ฅผ ํ†ตํ•ด html, css, javascript๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ๋•Œ template๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์œ„ ์ฒ˜๋Ÿผ html ํƒœ๊ทธ๋ฅผ ๊ฐ™์ด ์ž…๋ ฅํ•ด์„œ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ์ƒ๋‹นํžˆ ๋งŽ์€ ๋Ÿ‰์˜ ์‘๋‹ต์„ ํ•˜๊ธฐ์—๋Š” ์–ด๋ ค์šด ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฏ€๋กœ render๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

views.py

ํ•ด๋‹น request๋ฅผ ๋ฐ›์•„ index.html๋กœ ๋ Œ๋”๋ง ํ•˜๋ฉฐ {}์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค๋Š” ๋œป

rendering์€ ์–ด๋–ค ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค€๋‹ค๋Š” ์˜๋ฏธ๋ณด๋‹ค๋Š” ์–ด๋– ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•ด๋‹น html์„ ์™„์„ฑํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

index.html

setting.py

views.py

index.html

{{ }} ๋Š” ํ…œํ”Œ๋ฆฟ ์–ธ์–ด ์‚ฌ์šฉ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค.

|, ํŒŒ์ดํ”„๋ผ์ธ์€ ํ•„ํ„ฐ๋ง์„ ์˜๋ฏธํ•œ๋‹ค.

{{ my_name | length }} : ๊ธธ์ด๋ฅผ ์ถœ๋ ฅ

{{ my_name | upper }} : ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ์ถœ๋ ฅ

ํ•„ํ„ฐ๋ง ์ข…๋ฅ˜๋Š” ๊ต‰์žฅํžˆ ๋งŽ์œผ๋ฉฐ ๋‹คํ๋จผํŠธ๋ฅผ ์ฐธ์กฐ.

for๋ฌธ ํƒœ๊ทธ์™€ if๋ฌธ ํƒœ๊ทธ

views.py

index.html

Last updated

Was this helpful?