데브코스-데이터엔지니어링

장고 활용한 API 서버 만들기(2)

묠니르묘묘 2024. 4. 23. 23:08

뷰와 템플릿

  • SQL order by desc 및 limit 구현 예시
    • Question.objects.order_by('-pub_date')[:5]
    • order_by 컬럼명 앞 "-"이 있으면 내림차순(desc), 없으면 오름차순(asc)
  • model에 있는 내용 화면(view)에 출력하는 과정
    1. templates/polls/index.html 생성
    2. views.py 에서 context 변수에 dict 형태로 선언
      • context = {'first_question' : latest_question_list[0] }
        • 'first_question' 이라는 키와 latest_question_list[0] 이라는 값을  index.html에 전달할 변수
    3. index.html에 전달하고자 view.py 에 from django.shortcuts import render 선언
    4. index 함수 내 `return render(request, 'polls/index.html', context)` 반환

 

템플릿에서 제어문 사용하기

  • {% if 조건 %} 내용 {% elif 조건 %} 내용 {% else %} 내용 {% endif %}
  • {% for e in elements %} 내용 {% endfor %}

 

404 에러 처리하기

  • try-except 처리
  • get_object_or_404() 처리

 

폼(Form)과 커스터마이징

  • <form> 옵션 action과 method 속성 지정
    • action="{% url 'polls:vote' question.id %}"
    • method="post"
  • urls.py 에 polls:vote 에 대한 처리 로직 추가
    • path('<int:question_id>/vote/', views.vote, name='vote'),
  • views.py 에 응답 항목에 대한 save 및 예외 처리 로직 추가
    • def vote(request, question_id): 추가
    • request.POST('choice'] 를 통해 선택한 항목 가져오기
    • 예외처리 : 선택하지 않을 경우 try-except-else
      • KeyError 또는 Choice.DoesNotExist 예외 발생시 render의 context에 error_message 추가 전달
        • KeyError 예외 : 선택하지 않은 채 제출
        • Choice.DoesNotExist 예외 : choice id가 제출되는 시점에서 존재하지 않는 경우
      • 정상 요청인 경우 votes += 1 및 save() 이후 Redirect 수행
        • HttpREsponseRedirect(reverse('polls:index'))

 

Python 문법 - *args, **kwargs

  • 설명 링크
  • *args : 여러 개의 인자를 묶어서 하나의 튜플로 묵어주고 이를 args에 할당한다고 생각하자
  • **kwargs : 여러 개의 keyword arguments 들을 묶어서 딕셔너리로 만들어준다고 생각하자