views.py
import json from django.views import View from django.http import JsonResponse class MainView(View): def get(self, request): return JsonResponse({"Hello":"World"}, status=200)
urls.py
from django.urls import path from .views import MainView urlpatterns = [ path('', MainView.as_view()) ]
views.py
를 먼저 보면
{"Hello":"World"}
는 JSON
데이터 타입으로 JSON
은 JavaScript Object Notation
의 줄임말로, 인터넷에서 자료를 주고받을 때 널리쓰이는 데이터 타입으로 자리잡은 형식이다.
json
데이터를 처리하기 위해서 json
을 import
한다.
View
클래스는 직접 생성하지 않고 장고 프레임워크에 내장된 클래스를 상속받아 씁니다.
JsonResponse
는 서버의 요청에 대한 응답을 Json
으로 응답하기 위해 사용합니다.
def get
함수 역시 기술하긴 했지만 View
클래스에 내장된 메소드로 상속받아 사용하는 것이다.
다음 urls.py
를 보면
장고에서 URL
경로를 처리하기 위해 django.urls.path
를 import
한다.
앞에서 살핀 views.py
의 MainView
클래스를 import
한다.
경로를 명시할 때는 urlpatterns
같은 리스트 안에 경로를 저장한다.
urlpatterns
안에 존재하는 코드를 읽어보면, ''
일때 MainView.as_view()
즉 MainView
라는 클래스에 내장된 as_view()
함수를 실행합니다. 그럼 as_view()
메소드는 현재 주소인 나를 호출하면 그 호출을 한 http
메소드가 GET
인지 POST
인지 DELETE
인지 PUT
인지 등을 판별해서 그에 맞는 함수를 실행시켜줍니다.
Object Relational Mapping, 객체-관계 매핑
객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다. 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다. 객체 모델과 관계형 모델 간에 불일치가 존재한다. ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다. 데이터베이스 데이터 <—매핑—> Object 필드 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.
models.py
from django.db import models class Users(models.Model): name = models.CharField(max_length = 50) email = models.CharField(max_length = 50) password = models.CharField(max_length = 300) created_at = models.DateTimeField(auto_now_add = True) updated_at = models.DateTimeField(auto_now = True)
Users
라는 테이블을 생성하고 name
, email
, password
, created_at
, updated_at
이라는 각각의 column
을 만든다고 생각하면 된다. 각각의 column
을 만들 때 데이터 타입
이나 max_length
같은 것을 미리 정해서 생성한다.
이제 위에 생성된 데이터들을 POST
하기 위해 views.py
를 수정한다.
views.py
import json from django.views import View from django.http import JsonResponse from .models import Users 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) def get(self, request): return JsonResponse({"Hello":"World"}, status=200)
그 후 터미널에서 httpie
를 사용해서 다음 명령을 통해 데이터를 입력할 수 있다.
http -v '본인 레플릿 페이지 주소' name='테스트용이름' email='테스트용이메일' password='비밀번호'
http
프로토콜을 통해 POST
메소드를 구현한 것이다. 즉 데이터베이스에 데이터를 입력한 것이다.
페이지에 데이터를 출력하고 싶다면 views.py
의 get
함수를 변경하면 된다.
프로토콜은 인터넷에서 통신하기 위해 정해진 규약으로 나중에 velog
작성할 일이 생길 것 같아서 skip
하겠습니다.
def get(self, request):
user_data = Users.objects.values()
return JsonResponse({'users':list(user_data)}, status=200)
위와 같이 수정하면 models.py
에서 생성했던 데이터베이스에 담긴 테이블에 좀 전에 입력한 데이터들이 저장되고 get
함수에 의해 웹페이지에 나타난다.