[데이터 엔지니어링 데브코스] TIL 12일차 - 장고 활용한 API서버 만들기(2)

박단이·2023년 10월 31일
0

데브코스 TIL

목록 보기
11/56

오늘 공부한 내용🤓

  1. 뷰(View)와 템플릿(Template)
    • 뷰는 models에서 정의한 테이블을 실제 화면에 적용하는 것이고, 템플릿은 django에서 html을 쓰게 해주는 도구이다.
    • 뷰는 views.py 파일에서 작성한다.
    • 템플릿은 각 앱에 templates/app-name 폴더를 만든 후, 적용할 html 파일을 만든다.
# View 예시
# views.py
from django.http import HttpResponse
	from .models import *

	def index(request):
    	# order by의 인자 앞에 - 를 붙혀주면 내림차순, 안붙혀주면 오름차순
		latest_question_list = Question.objects.order_by('-pub_date')[:5]		
		output = ', '.join([q.question_text for q in latest_question_list])
		return HttpResponse(output)
<!--  Template 예시 -->
<!-- index.html -->
{% if questions %}
<!--조건문, 반복문은 {% %}을 사용하며 콜론을 사용하지 않는다.-->
<ul>
	{% for quesion in questions %}
		<li>{{quesion.question_text}}</li>
	{% endfor %}
</ul>
{% else %}
<p>no questions</p>
{% endif %}
<!--제어문이 끝나는 곳에는 {% endif %} {% endfor %} 을 써서 표시해준다.-->
# views.py
from django.http import HttpResponse
from .models import *
from django.shortcuts import render			
# render를 통해 html을 렌더링해준다.
# Django의 내장 함수 중 하나로, HTTP 요청을 받아 해당 요청에 대해 원하는 템플릿 파일을 렌더링하여 응답하는 기능
# 보통 Django의 뷰(View)에서 사용
# 첫 번째 인자로 요청(Request) 객체, 두 번째 인자로 템플릿 파일의 경로, 그리고 세 번째 인자로 Context 변수를 입력 받습니다

def index(request):
	latest_question_list = Question.objects.order_by('-pub_date')[:5]
	context = {'first_question' : latest_question_list[0]}
	return render(request, 'polls/index.html', context)		# html에서 보여줄 데이터를 객체형태로 보내준다.
  1. 상세 페이지 만들기 (a 태그)
    • 상세 페이지를 만들 때 url을 적용하기 위해서 urls.py파일에 app_name을 꼭 명시하자.
    • 동적으로 변화하는 url은 <문자형:변수이름> 으로 사용한다. 변수 이름은 views.py에서 그대로 사용한다.
    • html 파일에서는 {% url 'app_name:url path name' 넣어야하는 인자 값 %} 을 사용하여 해당 url로 이동한다.
  2. 404 에러 처리하기
    • 서버의 문제가 아님에도 500에러가 날 때 404에러를 발생시킬 수 있다.
    • 이 코드는 views.py 파일에서 이뤄진다.
    • try ~ except ... 구문을 사용할 수도 있고 내장 함수를 사용할 수도 있다.
# try ~ except 구문
from django.http import HttpResponse, Http404
from .models import *
from django.shortcuts import render

def detail(request, question_id):
	try:
		question = Question.objects.get(pk=question_id)
	except Question.DoesNotExist:
		raise Http404("Question does not exist")
	
	return render(request, 'polls/detail.html', {'question':question})
# 내장 함수
from django.http import HttpResponse
from .models import *
from django.shortcuts import render, get_object_or_404

def detail(request, question_id):			
	question = get_object_or_404(Question, pk=question_id)
	
	return render(request, 'polls/detail.html', {'question':question})

느낀 점😊

에러 처리하는 방법이 궁금했는데 이번에 갈피가 잡힌 것 같다. form 을 적용하는 부분이 조금 헷갈리는데 복습하면서 손에 익혀야겠다.

profile
데이터 엔지니어를 꿈꾸는 주니어 입니다!

0개의 댓글