# Restful API Django

RESTAPI

JSON (JavaScript Object Notation)

데이터의 송수신을 자바스크립트의 객체로서 수행할 수 있게끔하는 가벼운 문자열 데이터 표현식
<> XML(Extensible Markup Language)
만국 공통 자료형 -> 문자열
문자열로 변환해서 전송하는 과정 -> 직렬화(Serializer)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import json

diary = {
'id' : 3,
'title' : 'I\'m starving',
'body': ' what>??'
}

print(type(diary)) #dic

json_diary = json.dump(diary) #dictionary -> json
print(type(json_diary)) #str

back_diary = json.loads(json_diary) #json -> dictionary
print(type(back_diary)) # dic

JSON참고

Http Request & Method

Http Request

Method Meaning
GET 요청받은 URL의 정보를 검색하여 응답한다.
POST 요청된 자원을 생성(CREATE)한다.
PUT 요청된 자원을 수정(UPDATE)한다.
DELETE 요청된 자원을 삭제(DELETE)한다.
PATCH 요청된 자원의 일부를 교체(수정)한다.
OPTION 웹서버에서 지원되는 메소드의 종류 확인

HTTP Response

1xx(정보) : 요청을 받았으며 프로세스를 계속한다.
2xx(성공) : 요청을 성공적으로 받았으며 인식했고 수용하였다.
3xx(리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요하다.
4xx(클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.
5xx(서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패했다.

Httpie

Command Line으로 동작하는 Http Client

1
2
3
4
5
pip install --upgrade httpie #설치
http [flags] [Method] URL [ITEM[ITME]]
#flags = 옵션
#Method = Request (GET / POST / PUT / DELETE / PATCH / OPTION)
#ITEM = 인자 #GET -> X == A #POST -> X = A

POST

1
2
3
4
#JSON 형식의 요청:
http --json POST [주소] GET == 값 / POST = 값
#HTML form 형식의 요청:
http --form POST [주소] GET == 값 / POST = 값

HTML 방식
예
JSON방식
예2

HTTPIE 참고 사이트

CBV(Generic View) <> FBV

Class Based View <> Function Based View

왜 클래스?

  • GET, POST 등 HTTP 메소드에 따른 처리 코드를 작성할 때 if 함수 대신에 메소드 명으로 코드의 구조가 깔끔하다.
  • 다중상속 같은 객체지향 기법을 활용해 제너릭 뷰, 믹스인 클래스 등을 사용해 코드의 재사용과 개발 생산성을 높여준다.

제네릭 뷰와 상속

  1. 기반 뷰(Base View): 뷰 클래스를 생성하고 다른, 제너릭 뷰의 부모 클래스가 되는 기본 제너릭 뷰

    • View : 최상위 부모 제너릭 뷰 클래스
    • TemplateView : 주어진 템플릿으로 렌더링
    • RedirectView : 주어진 URL로 리다이렉트
  2. 제너릭 보기 뷰(Generic Display View): 객체의 목록 또는 하나의 객체 상세 정보를 보여주는 뷰

    • DetailView : 조건에 맞는 하나의 객체 출력
    • ListView : 조건에 맞는 객체 목록 출력
  3. 제너릭 수정 뷰(Generic Edit View): 폼을 통해 객체를 생성, 수정, 삭제하는 기능을 제공하는 뷰

    • FormView : 폼이 주어지면 해당 폼을 출력
    • CreateView : 객체를 생성하는 폼 출력
    • UpdateView : 기존 객체를 수정하는 폼을 출력
    • DeleteView : 기존 객체를 삭제하는 폼을 출력
  4. 제너릭 날짜 뷰(Generic Date View): 날짜 기반 객체의 연/월/일 페이지로 구분해 보여주는 뷰

    • YearArchiveView : 주어진 연도에 해당하는 객체 출력
    • MonthArchiveView : 주어진 월에 해당하는 객체 출력
    • DayArchiveView : 주어진 날짜에 해당하는 객체 출력
    • TodayArchiveView : 오늘 날짜에 해당하는 객체 출력
    • DateDetailView : 주어진 연, 월, 일 PK(또는 슬러그)에 해당하는 객체 출력

제네릭 뷰 변수 ?

model
queryset
template_name : 템플릿 파일명을 문자열로 지정
context_object_name : 뷰에서 템플릿 파일에 전달하는 컨텍스트 변수명을 지정
paginate_by : 페이징 기능이 활성화 된 경우 페이지당 출력 항목 수를 정수로 지정
date_field : 이 필드의 타입은 DateField 또는 DateTimeField
form_class : 폼을 만드는데 사용할 클래스를 지정
success_url : 폼에 대한 처리가 성공한 후 리디이렉트할 URL 주소

함수

def get_queryset() : queryset 속성을 반환
def get_context_data(**kwargs) : 뷰에서 템플릿 파일에 넘겨주는 컨텍스트 데이터를 추가하거나 변경하는 목적으로 오버라이딩
def form_valid(form)