🧩 Django의 request 객체 쉽게 이해하기
✅ 1. request는 누가 주는 걸까? 첫 번째 인자
우리는 def home_view(request):라고 작성하지만,
이 request는 우리가 만든 게 아니라 Django가 만들어서 넣어주는 것입니다.
즉, 사용자가 웹사이트에 접속하거나 버튼을 누를 때 Django가 자동으로 요청 정보를 분석해서 담아준 객체예요.
✅ 2. 왜 꼭 첫 번째 인자로 써야 할까?
Django는 사용자의 요청이 들어오면:
브라우저 → 서버(Django) → 요청을 분석해서 request 객체 생성 → view 함수 호출할 때 넘김
그래서 view 함수의 첫 번째 매개변수로 무조건 request를 넣어줘야 합니다.
def home_view(request): # ← 필수
print(request.method) # 예: 'GET'
✅ 3. request 안에는 뭐가 들어있을까?
속성 설명 예시
request.method | 어떤 요청인지 | 'GET', 'POST' 등 |
request.GET | 주소 뒤 ?로 온 데이터 | /search?q=django → request.GET['q'] → 'django' |
request.POST | 폼 입력값 | <input>으로 전송된 내용 |
request.body | 원시 데이터 (JSON 등) | REST API 요청 처리 시 사용 |
request.user | 로그인한 사용자 객체 | 인증이 필요한 페이지에서 유용 |
request.path | 요청한 주소 경로 | 예: '/articles/5/' |
✅ 4. 실제 사용 예시
def contact_view(request):
if request.method == "POST":
name = request.POST.get("name")
message = request.POST.get("message")
print(f"{name}님의 메시지: {message}")
return render(request, "contact.html")
- 사용자가 이름과 메시지를 보내면 request.POST로 값을 읽음
- 이후 DB 저장, 이메일 전송 등 처리 가능
✅ 5. 한 줄 요약
request는 Django가 자동으로 넘겨주는 사용자 요청 정보 상자입니다 🎁
우리는 그 안에 든 걸 꺼내서 어떤 요청인지 확인하고, 응답을 만들어주는 역할을 합니다.
✅ 6. 더 궁금하다면 직접 들여다보자!
print(request) # 전체 요약 정보
print(request.__dict__) # 내부 구조까지 확인 가능
📌 예시 출력:
<WSGIRequest: GET '/articles/3/'>
{
'_read_started': False,
'resolver_match': ResolverMatch(func=<function article_detail>, args=(), kwargs={'article_id': '3'}, url_name='article_detail', ...),
'path': '/articles/3/',
'method': 'GET',
'GET': <QueryDict: {}>,
'POST': <QueryDict: {}>,
'user': <User: anonymous>,
...
}
📌 요청에 어떤 속성이 들어있는지 직접 출력해서 확인하면 실력 향상에 큰 도움이 됩니다.
✅ 7. Class-Based View에서는?
함수형 뷰는 request를 첫 번째 인자로 받지만, 클래스 기반 뷰에서는 **self.request**로 사용합니다.
from django.views import View
from django.http import HttpResponse
class HelloView(View):
def get(self, request):
user_agent = self.request.headers.get("User-Agent")
return HttpResponse(f"당신의 브라우저는 {user_agent}입니다")
✔️ 클래스 뷰 내부에서는 self.request를 통해 동일한 요청 정보를 다룹니다.
이제 request 객체가 훨씬 친숙해졌죠? 😎
Class-Based View나 API 처리 흐름까지 이어서 보고 싶다면 말씀해주세요!
'기술블로그-Django편' 카테고리의 다른 글
[Django 3일차] Django에서의 요청(request)과 뷰(view)의 모든 것 1/4 (short_url 프로젝트)(250514) (0) | 2025.05.14 |
---|---|
🔍 Django에서 Model.objects.get(code=code)가 뭔 뜻이야? (0) | 2025.05.14 |
📌 Django URL 패턴 등록 순서 완전 정리 (0) | 2025.05.14 |
📨 Django Form 동작 흐름 완전 정리 (0) | 2025.05.14 |
🚦 라우팅(Routing) vs 매핑(Mapping) 완전 정리 (0) | 2025.05.14 |