학습주제
GET
학습내용
Question에 대해 JSON으로 제공되는 API 서버의 기능을 구현.
index에 해당하는 목록 기능 구현.
index, detail, result는 모두 조회하는 기능이 이엇음. vote는 값을 받아서 숫자를 변경하는 역할을 했음.
오늘은 이 index에 해당하는 목록 기능 구현.
http의 get 메소드 활용 (정보를 획득할 때)
새로운 정보를 만들어주세요 post
detail.html에서 form에서
post 메소드를 이용한 적이 있다.
polls_api - views.py에서
API 데코레이터를 import -> 메소드를 정의할 때 사용
from rest_framework.decorators import api_view
@api_view()
def qeustion_list(request):
api_view()에 아무것도 넣지 않아도, question_list가 get 요청을 처리할 것임을 알 수있다.
question을 가져와야 하므로,
from polls.models import question
이걸 다시 serialzier를 이용해야 하므로
from polls_api.serializers import QuestionSerializer
이 시리얼라이저를 만들 때, Question의 전체 목록인, questions로 만든다. 이번엔 인스턴스 1개가 아니므로, 뒤에 many = True
라고 하여 시리얼라이저가 객체가 여러개임을 인식하도록 한다.
Response도 import 한다
from rest_framework.response import Response
이렇게 정의한 question_list가 url을 통해 접근 가능하도록 urls.py에 가서 정의해준다.
from django.urls import path
from .views import *
urlpatterns = [
path('question/', question_list, name='question-list')
]
이는 polls_api의 urls.py에서의 정의이고, mysite에 가서도 정의해줘야 한다. 이전 polls의 urls도 mysite의 urls.py에서 path를 통해서 polls 뒤로 연결되었었다.
urlpatterns = [
path('admin/', admin.site.urls),
path('polls/', include('polls.urls')),
path('rest/', include('polls_api.urls')),
]
경로를 rest로 추가해준다.
브라우저에서 http://127.0.0.1:8000/rest/question/
을 찾자, 다음과 같은 오류가 났다.
TemplateDoesNotExist at /rest/question/
rest framework도 정상적으로 설치했는데, 안돼서 스택오버플로를 검색하니, mysite - setting.py에 rest_framework
을 설치하니 정상적으로 작동했다. 처음에 오타를 낸줄 알고 한참을 들여다 봤었다.
Django REST frmaework. 아까 @api_view()
데코레이터 기능으로, 출력 화면도 알아서 꾸며준 것을 볼 수 있다.
우리는 JSON 형태로 데이터를 내려주기만 했었다. rest framework가 그려주는 이 html 화면은 서버로 요청을 하게 되는데, JSON 파일을 요청하게 된다. 상단의 GET - JSON을 누르면
이런 파일이 주어질 것이다. 그러면 이 rest framework은 API를 통해 받은 JSON을 이렇게 화면으로 그려주게 된다.
JSON 형태의 API 요청 응답을 구현해 보았다.
view를 만들었을 때 이 view에 접근할 수 있는 url을 앱의 urls.py에 적어주어야 하고, 앱을 처음 만들었을 경우 프로젝트의 urls.py에서 path로 연결해 주어야 한다.
파이썬 딕셔너리 -> JSON 형태
@api_view 데코레이터의 ()가 비어있는 경우에는, GET 요청을 처리