Django Repl.it Guide

BLAKE KIM·2020년 7월 31일
0

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 데이터 타입으로 JSONJavaScript Object Notation의 줄임말로, 인터넷에서 자료를 주고받을 때 널리쓰이는 데이터 타입으로 자리잡은 형식이다.

json 데이터를 처리하기 위해서 jsonimport한다.
View 클래스는 직접 생성하지 않고 장고 프레임워크에 내장된 클래스를 상속받아 씁니다.
JsonResponse는 서버의 요청에 대한 응답을 Json으로 응답하기 위해 사용합니다.

def get 함수 역시 기술하긴 했지만 View 클래스에 내장된 메소드로 상속받아 사용하는 것이다.

다음 urls.py를 보면

장고에서 URL 경로를 처리하기 위해 django.urls.pathimport한다.
앞에서 살핀 views.pyMainView 클래스를 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.pyget함수를 변경하면 된다.

프로토콜은 인터넷에서 통신하기 위해 정해진 규약으로 나중에 velog 작성할 일이 생길 것 같아서 skip 하겠습니다.

def get(self, request):
	user_data = Users.objects.values()
	return JsonResponse({'users':list(user_data)}, status=200)

위와 같이 수정하면 models.py에서 생성했던 데이터베이스에 담긴 테이블에 좀 전에 입력한 데이터들이 저장되고 get함수에 의해 웹페이지에 나타난다.

profile
BackEnd

0개의 댓글