View + HttpResponse 연습문제(2회차)

송용진·2024년 4월 2일

연습문제 1 (표현 형태는 자유)

Question 모델의 pub_date를 기준으로
가장 최근의 질문 10개를 선택하는 Django view 함수를 작성하세요.

from django.http import HttpResponse
from .models import Question

def recent_questions(request):
    latest_question_list = Question.objects.order_by("-pub_date")[:10]
    output = ", ".join([q.question_text for q in latest_question_list])
    return HttpResponse(output)

"-"는 내림차순을 의미

"HttpResponse"는 Django에서 HTTP 요청에 대한 응답을 생성하는 클래스
HttpResponse(output)는 HttpResponse 클래스의 인스턴스를 생성하는 것
HttpResponse(output)는
output 변수의 내용을 포함한
HTTP 응답을 나타내는 객체를 만듦

연습문제 2

Django view에서 Question 객체들 중
pub_date가 오늘 날짜인 객체만 선택하여,
그 질문들의 텍스트를 쉼표로 구분된 문자열로 반환하는 함수를 작성하세요.

from django.http import HttpResponse
from django.utils import timezone
from .models import Question

def today_questions(request):
    today = timezone.now().date()
    questions_today = Question.objects.filter(pub_date__date=today)
    output = ", ".join([q.question_text for q in questions_today])
    return HttpResponse(output)
  1. timezone.now().date:

먼저, timezone.now()를 호출하여 현재의 datetime.datetime 객체를 얻습니다. 그런 다음 이 객체의 date 속성을 참조하여 datetime.date 객체를 얻습니다.

timezone.now()          => 2024-04-02 12:30:00
timezone.now().date     => 2024-04-02
  1. timezone.now().date():

먼저, timezone.now()를 호출하여 현재의 datetime.datetime 객체를 얻습니다. 그런 다음 이 객체의 date() 메서드를 호출하여 datetime.date 객체를 얻습니다.

timezone.now()          => 2024-04-02 12:30:00
timezone.now().date()   => 2024-04-02

결과적으로 두 경우 모두 현재의 날짜를 나타내는 datetime.date 객체를 반환하지만, 호출 방식에 차이가 있습니다. 첫 번째 방식은 속성 참조이고, 두 번째 방식은 메서드 호출입니다.

연습문제 3

HttpResponse`를 사용하여
"Hello, world!" 텍스트를 반환하는
가장 간단한 Django view 함수를 작성하세요.

from django.http import HttpResponse

def hello_world(request):
    return HttpResponse("Hello, world!")

연습문제 4

Django의 Question 모델에서
pub_date가 현재 연도인 질문만 필터링하여,
그 질문들의 텍스트를 반환하는 view 함수를 작성하세요.
현재 연도는 자동으로 계산되어야 합니다.

from django.utils import timezone
from .models import Question
from django.http import HttpResponse

def pubdate2024(request):
    current_year = timezone.now().year
    q_list = Question.objects.filter(pub_date__year = current_year)
    q_list_txt = ", ".join([i.question_text for i in q_list])
    return HttpResponse(q_list_txt)
profile
개발자

0개의 댓글