TIL#47 Django (1)

Dasom·2020년 8월 28일
1

Django

목록 보기
2/34
post-thumbnail

Json

JavaScript Object Notation의 약자이다. 특히 웹 브라우져와 웹서버 사이에 데이타를 교환하는데 많이 사용되고 있다. 가장 많이 사용되는 JSON 포맷은 Key-Value Pair의 컬렉션이다.

텍스트로 이루어져 있으므로 사람과 기계 모두 읽고 쓰기 쉽다.
프로그래밍 언어와 플랫폼에 독립적이므로, 서로 다른 시스템간에 객체를 교환하기에 좋다.
속성-값 쌍( attribute–value pairs and array data types (or any other serializable value)) 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다. 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합하다.

- 위키백과, 우리 모두의 백과사전

import json
from django.views import View
from django.http import JsonResponse

class MainView(View):
  def post(self, request):
    data = json.loads(request.body)
    Users(
      name = data['name'],
      email = data['email'],
      password = data['password']
    ).save()

    return JsonResponse({'message':'SUCCESS'}, status=200)

-> endpoint view를 꾸릴 때 항상 사용하게 되는 대표적인 요소들

json.loads() : JSON 포맷 데이터를 Python 객체로 읽기, 역직렬화, 디코딩
json.dumps() : Python 객체를 JSON 데이터로 쓰기, 직렬화, 인코딩


view.py
일련의 처리가 끝난 후 return 값으로 render, redirect 지정할 수 있음

render

API의 리턴값으로 template 지정 가능

render(request, template_name, context = None, content_type = None, status = None, using = None)

request, template_name 은 필수인자이다. template_name은 html파일 이름이다.
context 는 위의 인자와 함께 html에 리턴하고 싶은 dictionary를 지정한다. html 파일에서 {{ key }} 로 access 가능하다.

-> template, context 를 합쳐서 HttpResponse object를 리턴

❗️ render 는 html 로 입력받아 해석해서 표준출력장치(모니터)로 출력해준다. 이것을 렌더링(rendering)이라고 한다.

redirect

다른 url(API)로 이동한다. template 를 지정할 수 없고 단순히 다른 API 를 호출할 때만 사용한다. render처럼 context를 넘기거나 할 수 없다.

redirect(to, *args, permanent=False, **kwargs)

to : url 의 path를 직접 적거나, urlpattern에서 지정한 name 을 쓴다.

-> 패스된 인자를 가지고 HttpResponseRedirect 리턴

HttpResponseRedirect

현재 app에서 다른 app으로 이동을 해주는 url Redirect 를 해줌

HttpResponseRedirect(reverse())

reverse : urlpattern 에서 지정한 name을 씀
-> reverse 를 안쓰고 HttpResponseRedirect를 쓰게 되면 url주소를 입력해야 한다. 추후에 url 주소가 바뀌게 되면 urls.py로 가서 수정해야 할 뿐 아니라 모든 링크를 찾아서 수정해야 한다. reverse를 쓰면 지정한 url_name으로 url을 불러올 수 있다.

profile
개발자꿈나무🌲

0개의 댓글