Tinkerbell Glitter
[250107] ํŠธ๋ ˆ์ผ๋ง ์Šฌ๋ž˜์‹œ(Trailing Slash) ๋ž€?
Back End ๐Ÿ“ฒ/Django โ›“๏ธ
ํŠธ๋ ˆ์ผ๋ง ์Šฌ๋ž˜์‹œ๋ž€? โˆ•1.ํŠธ๋ ˆ์ผ๋ง ์Šฌ๋ž˜์‹œ ์ •์˜URL ์˜ ๋์— ์˜ค๋Š” ์Šฌ๋ž˜์‹œ(`/`)๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, Django ์—์„œ URL ์„ ์„ค๊ณ„ํ•  ๋•Œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹คURL ์ด `/` ๋กœ ๋๋‚˜๋ฉด ํŠธ๋ ˆ์ผ๋ง ์Šฌ๋ž˜์‹œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค์˜ˆ: `https://example.com/about/`URL ์ด `/` ๋กœ ๋๋‚˜์ง€ ์•Š์œผ๋ฉด ํŠธ๋ ˆ์ผ๋ง ์Šฌ๋ž˜์‹œ๊ฐ€ ์—†๋‹ค๊ณ  ํ•œ๋‹ค์˜ˆ: `https://example.com/about`2. Django ์˜ ๊ธฐ๋ณธ ๋™์ž‘Django ๋Š” ํŠธ๋ ˆ์ผ๋ง ์Šฌ๋ž˜์‹œ๊ฐ€ ์žˆ๋Š” URL ์„ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค`APPEND_SLASH=True`(๊ธฐ๋ณธ๊ฐ’): ํŠธ๋ ˆ์ผ๋ง ์Šฌ๋ž˜์‹œ๊ฐ€ ์—†๋Š” ์š”์ฒญ์ด ์˜ค๋ฉด Django ๊ฐ€ ์ž๋™์œผ๋กœ ์Šฌ๋ž˜์‹œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•œ๋‹ค์˜ˆ์ œ# urls.pyfrom django.urls import pathfrom . import ..
[250106] HTML ํผ(Form), ์ฟผ๋ฆฌ์ŠคํŠธ๋ง(Query String), ๊ทธ๋ฆฌ๊ณ  Get
Back End ๐Ÿ“ฒ/Django โ›“๏ธ
HTML ํผ(HTML Form) ์ด๋ž€? ๐Ÿซง1. HTML ํผ ์ •์˜์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์›น ํŽ˜์ด์ง€์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ด๋‹คdjango ์—์„œ ํผ์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜์˜ ํ•ต์‹ฌ ์—ญํ• ์„ ํ•จ2. ๊ธฐ๋ณธ ๊ตฌ์กฐ ๊ฒ€์ƒ‰์ฃผ์š” ์†์„ฑ`method` : ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๋Š” HTTP ๋ฉ”์„œ๋“œ(`GET` ๋˜๋Š” `POST`)`GET` : URL์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์œผ๋กœ ํฌํ•จํ•˜์—ฌ ์ „๋‹ฌํ•จ`POST` : ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ ๋ณธ๋ฌธ(body)์— ํฌํ•จํ•˜์—ฌ ์ „๋‹ฌํ•œ๋‹ค`action` : ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ URL(๊ธฐ๋ณธ ๊ฐ’์€ ํ˜„์žฌ ํŽ˜์ด์ง€์ž„)Django ์™€์˜ ์—ฐ๋™HTML ํ…œํ”Œ๋ฆฟ์œ„์™€ ๊ฐ™์€ ํผ์„ ์ž‘์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค๋ทฐ ์ฒ˜๋ฆฌ(views.py)def search(request): query..
[250103] Django Template Language ๋ž€?
Back End ๐Ÿ“ฒ/Django โ›“๏ธ
Django Template Language ๋ž€? ๐Ÿ…ณ๐Ÿ†ƒ๐Ÿ…ป1. Django Template Language ์ •์˜Django Template Language(DTL)๋Š” Django์—์„œ HTML์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„์ž…๋‹ˆ๋‹คDTL์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฑ์—”๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ์–ด์š”2. ๊ธฐ๋ณธ ๋ฌธ๋ฒ•1. ๋ณ€์ˆ˜ ์ถœ๋ ฅํ…œํ”Œ๋ฆฟ์—์„œ Python ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋ ค๋ฉด `{{ variable_name }}` ์„ ์‚ฌ์šฉํ•ด์ค๋‹ˆ๋‹ค์•ˆ๋…•ํ•˜์„ธ์š”, {{ name }}๋‹˜!์ „๋‹ฌ๋œ ๋ณ€์ˆ˜ ์˜ˆ์ œ:return render(request, 'index.html', {'name': 'Alice'})๊ฒฐ๊ณผ:์•ˆ๋…•ํ•˜์„ธ์š”, Alice๋‹˜!2. ํ•„ํ„ฐ (Filters)๋ณ€์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค๊ตฌ๋ฌธ: `{{..
[241231] Classํ˜• View์™€ ํ•จ์ˆ˜ํ˜• View์˜ ์ฐจ์ด์ 
Back End ๐Ÿ“ฒ/Django โ›“๏ธ
ํ•จ์ˆ˜ ๊ธฐ๋ฐ˜ ๋ทฐ (Function-Based View, FBV) ๋ž€? โœจ1. ํ•จ์ˆ˜ํ˜• ๋ทฐ ์ •์˜FBV๋Š” Python์˜ ํ•จ์ˆ˜๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ทฐ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹คํŠน์ง•๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ : ๋‹จ์ˆœํ•œ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ ํ•ฉํ•จ๋ช…์‹œ์  ์š”์ฒญ ์ฒ˜๋ฆฌ: ์š”์ฒญ ๋ฐฉ์‹(GET, POST ๋“ฑ)์„ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ์ง์ ‘ ์ฒ˜๋ฆฌํ•œ๋‹ค์œ ์—ฐ์„ฑ: ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ๋กœ ์‰ฝ๊ฒŒ ์ž‘์„ฑ ๊ฐ€๋Šฅfrom django.http import HttpResponsedef my_view(request): if request.method == 'GET': return HttpResponse("This is a GET request.") elif request.method == 'POST': return HttpResponse("This is a PO..
[241230] MVC ํŒจํ„ด๊ณผ MTV ํŒจํ„ด
Back End ๐Ÿ“ฒ/Django โ›“๏ธ
MVC ํŒจํ„ด์ด๋ž€?1. MVC ํŒจํ„ด์˜ ์ •์˜๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‹ค์Œ์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•˜๋Š” ํŒจํ„ด์ž„Model(๋ชจ๋ธ)๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•จ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉ ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•จView(๋ทฐ)์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ๋‹ด๋‹นํ•จ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์ž„Controller(์ปจํŠธ๋กค๋Ÿฌ)์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•จModel๊ณผ View๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ค‘๊ฐ„ ์—ญํ• ์ž„ ๋””์ž์ธ ํŒจํ„ด์ด๋ž€?์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฒ€์ฆ๋œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์„ค๊ณ„ ๋ฐฉ๋ฒ•์ฃผ๋กœ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์„ค๊ณ„์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋‹คํ๋ฆ„์‚ฌ์šฉ์ž๊ฐ€ View๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ๋ณด๋ƒ„Controller๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๊ณ , ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ Model์—์„œ ๊ฐ€์ ธ์˜ดController๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณต..