Django response와 render 차이

이상해씨·2023년 8월 1일
0

장고 (Django)

목록 보기
14/38
post-custom-banner

Django return하는 방식

  • django view.py에서 처리한 데이터를 반환하는 방법 중 render, response가 있다.

1. render (HTML)

  • django에서 사용.

  • view.py에서 랜더링한 값을 templates의 html에 연결하여 웹사이트를 구축할 때 사용.

  • html에서 반환된 데이터를 가지고 웹페이지를 구성할 수 있음.

  • render는 HttpResponse 객체를 반환.
    - input : resquest
    - output : Httprespnse
    (HTML 페이지 생성을 위한)

1-1) 사용절차 및 예시

1. model과 render import

from django.shortcuts import render
from .models import Question

2. 데이터를 불러오는 함수 설정

  • 아래에서는 detail 함수에서 Question 모델의 모든 데이터를 가져옴

3. return render 설정

return render(request, "<연결할 html 주소>", {"<데이터 칼럼>":<데이터>})

# view.py
from django.http import Http404
from django.shortcuts import render
from .models import Question

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})

# html
<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
    <li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>

2. response (API)

  • django rest framework (DRF)에서 사용.
  • RESTful API 특화. view에서 client에게 응답을 전달하는 목적.
    - input : request
    • output : JSON, XML 형식
  • 데이터를 직렬화하여 HTTP응답 생성

2-1) 사용절차 및 예시

1. django rest framework 설치

$ pip install djangorestframework
$ pip install django-filter

2. settings.py의 installed_apps에 rest_framework 추가

#/djangoProject/settings.py
INSTALLED_APPS = [
   ...,
	'rest_famework',
]

3. serializer 설정

  • serializer : instance 를 JSON, XML의 형태로 렌더링하는 기능.
  • APP디렉토리 내부에 serializer.py 생성(models와 동일한 깊이)

  • serializer.py
from rest_framework import serializers
from .models import <모델명>

class <serializer >(serializers.Serializer):
    <연결하고자 하는 테이블의 칼럼명> = serializers.IntegerField()
    칼럼명 = serializers.<칼럼타입>
    칼럼명 = serializers.CharField()
    칼럼명 = serializers.CharField()
    칼럼명 = serializers.CharField()

    class Meta:
        model = <연결하고자 하는 테이블명>

4. views.py에서 데이터 처리 및 반환

1. model,serializer import
from .models import <모델명>
from .serializers import <serializer >
2 serializer 데이터에 적용하기
  • 변수 = serializer 명(데이터)
serializer = QuestionSerializer(question)
3. 데이터 반환
  • return Response(serializer.data)
return Response(serializer.data)
  • 예시
from django.shortcuts import get_object_or_404
from .models import Question
from .serializers import QuestionSerializer

class QuestionDetailView(APIView):
    def get(self, request, question_id):
        question = get_object_or_404(Question, pk=question_id)
        serializer = QuestionSerializer(question)
        return Response(serializer.data, status=status.HTTP_200_OK)

4. 확인

  • terminal에 python manage.py runserver하여 웹페이지 접속시 아래와 같은 창에 데이터가 뜨면 성공

  • 데이터는 json 형태로 출력됨

[
	{
    	"id": 1,
        "context":"오늘은 무슨 요일?",
        ...
        
    },
    {
    	"id": 2,
        "context":"오늘은 무슨 달?",
        ...
    }, ...
]


3. 자주 사용되는 django return 함수들

1. redirect

  • 특정 URL로 이동 할 때 사용
  • 상대 URL , 절대 URL 모두 가능
  • URL로 단순 이동하는 것이기 때문에 render, response처럼 context 값을 넘길 수는 없다
  • 로그인 실패시 재로그인 페이지로 이동, 계정이 없을 경우 회원가입 페이지로 이동 등에 사용

2. HttpResponse

  • 사용자에게 http 형식(주로 텍스트)의 데이터를 보여주고자 할 때 사용

3. JsonRepsonse

  • json형식의 데이터를 표출, 전달할 때 사용


참고

HTML :

DRF :

redirect :

profile
공부에는 끝이 없다
post-custom-banner

0개의 댓글