Django๋ฅผ ํ์ฉํด ๊ฐ๋จํ ์ฑํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋จ๊ณ๋ณ ๊ฐ์ด๋์ ๋๋ค. URL ๋ผ์ฐํ ๋ถํฐ HTMX๋ฅผ ํ์ฉํ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊น์ง ์ฐจ๊ทผ์ฐจ๊ทผ ์์๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ์ฑํ ์ฑ์ URL ๊ตฌ์กฐ๋ฅผ ์ค์ ํฉ๋๋ค.
๐ chat/urls.py
from django.urls import path
from . import views
urlpatterns = [
path("", views.index),
]
๐ config/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('chat/', include('chat.urls')),
]
๐ก ํฌ์ธํธ:
include('chat.urls')๋ฅผ ์ฌ์ฉํ๋ฉด chat ์ฑ์ ๋ชจ๋ URL์chat/์ ๋์ฌ๊ฐ ์๋์ผ๋ก ๋ถ์ต๋๋ค.
Django์ ํ ํ๋ฆฟ ์์คํ ์ ํ์ฉํด ๋์ ์นํ์ด์ง๋ฅผ ๋ง๋ญ๋๋ค.
๐ chat/templates/chat/index.html
๐ chat/views.py
def index(request):
return render(request, "chat/index.html")
๐ก Django ํ ํ๋ฆฟ ์์คํ :
render()ํจ์๋์ฑ๋ช /templates/๋๋ ํ ๋ฆฌ์์ ์๋์ผ๋ก ํ ํ๋ฆฟ ํ์ผ์ ์ฐพ์์ค๋๋ค.
| ๋ฉ์๋ | ์ฉ๋ | ํน์ง | ์์ |
|---|---|---|---|
| GET | ๋ฐ์ดํฐ ์กฐํ | ์์ ํจ, ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์ | ๊ฒ์, ํ์ด์ง ๋ก๋ |
| POST | ๋ฐ์ดํฐ ์์ฑ/์์ | ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ | ํผ ์ ์ถ, ์ฑํ ๋ฉ์์ง |
| PUT/PATCH | ๋ฐ์ดํฐ ์์ | ํน์ ๋ฆฌ์์ค ์ ๋ฐ์ดํธ | ํ๋กํ ์์ |
| DELETE | ๋ฐ์ดํฐ ์ญ์ | ๋ฆฌ์์ค ์ ๊ฑฐ | ๊ณ์ ์ญ์ |
โ ๏ธ ์ฃผ์: HTML
<form>ํ๊ทธ๋ GET๊ณผ POST๋ง ์ง์ํฉ๋๋ค. PUT, DELETE ๋ฑ์ JavaScript API๋ฅผ ํตํด ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
๐ chat/views.py
def chat_message_new(request: HttpRequest) -> HttpResponse:
question = request.POST.get("question", "")
if question:
answer = f"๐ค ๋น์ ์ ์ง๋ฌธ: {question}"
else:
answer = "โ ์ง๋ฌธ์ด ์
๋ ฅ๋์ง ์์์ต๋๋ค."
return HttpResponse(answer)
๐ chat/urls.py
urlpatterns = [
path("", views.index),
path("messages/new/", views.chat_message_new), # ์ URL ํจํด ์ถ๊ฐ
]
Query Parameters๋ URL ๋ค์ ?key=value&key2=value2 ํํ๋ก ๋ถ๋ ๋ฐ์ดํฐ์
๋๋ค.
์์: https://example.com/search?q=django&category=tutorial&page=1
Django์์์ ์ ๊ทผ ๋ฐฉ๋ฒ:
# GET ์์ฒญ
question = request.GET.get("question", "")
# POST ์์ฒญ
question = request.POST.get("question", "")
CSRF (Cross-Site Request Forgery): ์ฌ์ฉ์๊ฐ ์๋ํ์ง ์์ ์์ฒญ์ ๊ณต๊ฒฉ์๊ฐ ๋์ ๋ณด๋ด๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ณด์ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
<form method="POST">
{% csrf_token %} <!-- Django๊ฐ ์๋์ผ๋ก ๋ณด์ ํ ํฐ ์์ฑ -->
<!-- ํผ ๋ด์ฉ -->
</form>
๐ก๏ธ ๋ณด์ ํ: POST, PUT, DELETE ๋ฑ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ชจ๋ ์์ฒญ์๋ CSRF ํ ํฐ์ด ํ์ํฉ๋๋ค.
๊ธฐ์กด ๋ฐฉ์์ ๋ฌธ์ ์ :
HTMX ๋ฐฉ์์ ์ฅ์ :
<form hx-post="/chat/messages/new/" hx-target="#chat-response">
{% csrf_token %}
<input type="text" name="question" />
<input type="submit" value="์ ์ก" />
</form>
<div id="chat-response"></div>
| ์์ฑ | ์ค๋ช | ์์ |
|---|---|---|
hx-post | POST ์์ฒญ์ ๋ณด๋ผ URL | hx-post="/api/submit" |
hx-target | ์๋ต์ ํ์ํ ์์ ์ ํ์ | hx-target="#result" |
hx-get | GET ์์ฒญ์ ๋ณด๋ผ URL | hx-get="/api/data" |
hx-trigger | ์ด๋ฒคํธ ํธ๋ฆฌ๊ฑฐ ์ค์ | hx-trigger="click" |
.container ํด๋์ค๋ก ์ค์ ์ ๋ ฌhttp://127.0.0.1:8000/chat ์ ์"์ง๋ฌธ ์์" ์ค๋ฅ
request.POST.get() ์ฌ์ฉJavaScript ๋ณต์ก์ฑ
CSRF ํ ํฐ ๋๋ฝ
{% csrf_token %} ์ถ๊ฐurls.py์์ URL ํจํด ์ ์๐ช ๋์ ๊ณผ์ : ์ด ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ฐํ์ผ๋ก ๋ ๋ณต์กํ ์ฑํ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด์ธ์!