1. ๐ HTTP ์์ฒญ๋ถํฐ ์๋ต๊น์ง์ ํ๋ฆ
์น์ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ์ ๋ฐ๋ผ ๋์ํฉ๋๋ค.
๐ฆ ์์ฒญ → ์ฒ๋ฆฌ → ์๋ต ์์
๋ธ๋ผ์ฐ์
|
| (1) ์์ฒญ: URL ํด๋ฆญ, form ์ ์ถ ๋ฑ
↓
Django ์น ์๋ฒ (views.py)
|
| (2) ์์ฒญ ์ฒ๋ฆฌ ๋ฐ ๋ก์ง ์คํ
↓
ํ
ํ๋ฆฟ ๋ ๋๋ง (HTML)
|
| (3) HTML ์๋ต ์์ฑ
↓
๋ธ๋ผ์ฐ์
|
| (4) ํ๋ฉด ๋ ๋๋ง + CSS/JS ๋ถ๋ฌ์ค๊ธฐ
2. โ Django์ ๋ด๋ถ ๋์ ๊ตฌ์กฐ
โ 1) URL ์์ฒญ
- ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์์ https://example.com/posts/๋ฅผ ์์ฒญํ๋ฉด,
- urls.py์์ ํด๋น URL ํจํด์ ์ฐพ์ views.py์ ํน์ ํจ์(๋๋ ํด๋์ค)๋ฅผ ์คํํฉ๋๋ค.
# urls.py
path("posts/", views.posts_list, name="posts-list")
โ 2) View์์ ๋ก์ง ์ฒ๋ฆฌ
- View๋ DB์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ๊ณ์ฐํ ํ,
- ํ ํ๋ฆฟ ํ์ผ(HTML)๊ณผ ํจ๊ป ์๋ตํฉ๋๋ค.
# views.py
def posts_list(request):
posts = Post.objects.all()
return render(request, "blog/posts.html", {"posts": posts})
โ 3) Template ๋ ๋๋ง
- Django์ ํ ํ๋ฆฟ ์์ง์ .html ํ์ผ์ ์ฝ๊ณ ,
- ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํด HTML ์ฝ๋๋ก ๋ณํํฉ๋๋ค.
<!-- posts.html -->
{% for post in posts %}
<h2>{{ post.title }}</h2>
{% endfor %}
3. ๐จ HTML & CSS์ ์ญํ
๐ HTML
- ๊ตฌ์กฐ๋ฅผ ๋ด๋นํฉ๋๋ค. (<div>, <h1>, <p>, <form> ๋ฑ)
- Django๊ฐ render()๋ก ๋ฐํํ๋ ์ฃผ๋ ์ฝํ ์ธ ๋ HTML์ ๋๋ค.
๐จ CSS
- ์คํ์ผ์ ๋ด๋นํฉ๋๋ค.
- Django์์๋ ๋ณดํต static ํด๋๋ฅผ ๋ง๋ค์ด .css ํ์ผ์ ๊ด๋ฆฌํฉ๋๋ค.
<!-- HTML ์์ -->
<link rel="stylesheet" href="{% static 'styles/main.css' %}">
๐ ๋ธ๋ผ์ฐ์ ๋ HTML์ ๋จผ์ ๋ฐ๊ณ , ๊ทธ ์์ ์ฐ๊ฒฐ๋ CSS/JS๋ ์ถ๊ฐ ์์ฒญํจ
(1) HTML ๋ฐ์ → (2) CSS/JS ๊ฒฝ๋ก ํ์ → (3) ์ ์ ํ์ผ ์์ฒญ → (4) ํ๋ฉด ์์ฑ
4. ๐งฑ ์ ์ ํ์ผ (Static files)์ ์ฒ๋ฆฌ
- ๊ฐ๋ฐ ์ค์ runserver๊ฐ CSS ํ์ผ๋ ์๋์ผ๋ก ์๋นํฉ๋๋ค.
- ๋ฐฐํฌ ์์ ์น ์๋ฒ(Nginx ๋ฑ)๊ฐ ์ง์ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ณ๋ ์ ์ ํ์ผ ์๋ฒ๋ฅผ ๋ก๋๋ค.
# settings.py
STATIC_URL = "/static/"
STATICFILES_DIRS = [BASE_DIR / "static"]
๐ ์ ๋ฆฌ
๋จ๊ณ๋ด์ฉ๊ด๋ จ ํ์ผ
| ๋จ๊ณ | ๋ด์ฉ | ๊ด๋ จ ํ์ผ |
| ์์ฒญ | ์ฌ์ฉ์๊ฐ URL์ ์์ฒญ | urls.py |
| ์ฒ๋ฆฌ | View์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ | views.py |
| ๋ ๋๋ง | HTML ํ ํ๋ฆฟ ๋ ๋๋ง | templates/*.html |
| ์คํ์ผ | CSS ํ์ผ๋ก ๊พธ๋ฐ | static/*.css |
๐ท ๋ค์ด์ด๊ทธ๋จ ์ด๋ฏธ์ง ์ฒจ๋ถ
