views.py작성
ulrs.py작성
앱 내부에 templates 폴더 생성(+HTML 템플릿 작성)
VScode에서 !
+ Tab
기본적인 HTML파일 구조가 생성되는 자동완성 지원
settings.py 확인(TEMPLATES 설정에서 DIRS 및 APP_DIRS 경로 확인
Django 요청과 응답 흐름
HttpRequest → URLs → View → Template → View → HttpResponse
Django에서 클라이언트 요청을 처리하고 응답을 반환하는 흐름
1. 요청(Request)
• 클라이언트(브라우저)에서 특정 URL로 요청을 보냄
• 예: http://127.0.0.1:8000/index/
2. URL 처리 (urls.py)
• Django는 요청받은 URL을 기반으로 urls.py에서 URL 패턴과 View를 매핑
• URL 패턴은 path()로 정의, 요청을 특정 View로 전달
from django.urls import path
urlpatterns = [
path('index/', views.index),
]
/index/ URL로 요청이 들어오면 views.index 함수가 호출
3. View 처리 (views.py)
• views.py는 요청을 처리하고 적절한 응답을 반환
• 응답의 두 가지 방식:
- 직접 응답 생성: HttpResponse를 반환
- 템플릿 렌더링: HTML 파일을 반환
(1) 직접 응답
from django.http import HttpResponse
def index(request):
response = HttpResponse("<h1>Hello, Django!</h1>")
return response
간단한 응답에 적합, HTML이 길어질 경우 유지보수가 어려움
(2) 템플릿 렌더링
from django.shortcuts import render
def index2(request):
return render(request, "index2.html")
템플릿 파일을 활용하여 구조적이고 재사용 가능한 HTML을 반환
4. 템플릿 처리
• render() 함수는 지정한 HTML 템플릿 파일을 읽고 렌더링
• HTML 템플릿은 보통 templates 디렉토리에 저장
articles/templates/index.html
→ settings.py의 TEMPLATES 설정에서 이 디렉토리를 읽도록 설정되어 있어야 함
템플릿 예
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Back to the ZERO</title>
</head>
<body>
<h1>My First Django Project</h1>
<p>Please back to the zero!</p>
</body>
</html>
5. 응답(Response)
• Django는 View에서 생성된 응답(HttpResponse 또는 렌더링된 템플릿)을 클라이언트에 반환
• 클라이언트는 이 응답을 브라우저에 렌더링하여 화면에 표시
*Trailing Slash
• Django에서는 URL 패턴을 정의할 때 Trailing Slash(/)를 붙이는 것을 권장
• path("index/")는 /index/ URL에만 매칭되며, index로 들어오면 404 에러를 반환
• 이는 Django의 URL 정규화 방식이며, RESTful API 등을 제외하고 일반적으로 /를 사용하는 것이 표준
*render() 함수
template_name과 context를 받아 HTML을 반환하는 도우미 함수
def render(
request, template_name, context=None, content_type=None, status=None, using=None
):
"""
Return an HttpResponse whose content is filled with the result of calling
django.template.loader.render_to_string() with the passed arguments.
"""
content = loader.render_to_string(template_name, context, request, using=using)
return HttpResponse(content, content_type, status)
• request: 클라이언트 요청 객체
• template_name: 렌더링할 템플릿 파일 경로
• context: 템플릿에 전달할 데이터(선택 사항)
• 반환 값: 렌더링된 HTML 응답(HttpResponse)
*HTML을 템플릿으로 사용하기
users/ 경로로 요청을 처리하는 코드 작성
- URL 패턴 정의 (urls.py)
from django.urls import path
from articles import views
urlpatterns = [
path('users/', views.users),
]
- View 작성 (views.py)
from django.shortcuts import render
from django.http import HttpResponse
def users(request):
return render(request, "users.html")
- HTML 템플릿 작성 (templates/users.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Users Page</title>
</head>
<body>
<h1>HEY THERE</h1>
<p>USERS</p>
</body>
</html>
'∟Framework > ∟Django' 카테고리의 다른 글
Django - Design Patterns (0) | 2025.01.08 |
---|---|
Django - Request & Response (1) | 2025.01.07 |
Django - Client↔Server (2) | 2025.01.07 |
Django - App (1) | 2025.01.06 |
Django - Project (3) | 2025.01.03 |