데이터를 처리하기위해 사용하는 하나의 정의된 소스
보통 데이터베이스에서 데이터를 저장하고 조회하기위해 SQL문을 이용해야하지만
장고에서는 모델을 사용하면 SQL 쿼리문의 도움없이 데이터를 처리할 수 있다.
INSTALLED_APPS =
[ 'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app',
'app_2th', # 추가항 ]
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('', include('app.urls')), #
path('', include('app_2th.urls')), # app_2th 앱폴더의 urls.py와 연결함 path('admin/', admin.site.urls),
]
# Person을 정의하는 모델 정의
from django.db import models
# Create your models here.
class Person(models.Model): # 사용자의 이름을 정의하는 모델 생성
first_name = models.CharField(max_length=30) # 최대 30자 문자열
last_name = models.CharField(max_length=30) # 최대 30자 문자열
# first_name & last_name : 모델의 필드
# 각각의 필드는 클래스의 속성으로 명시되고
# 클래스의 속성은 데이터베이스의 컬럼과 연결된다.
쟝고는 위에서 구현한 모델 클래스를 DB의 실제 테이블로 생성하는 명령어를 제공
python3 manage.py makemigrations
python3 manage.py migrate
첫번째 명령어 실행결과
위 두 명령어를 실행하고 나면, DB역할을 수행하게 될 db.sqlite3를 생성
해줌.
앞서 배울때 PUAUAV 라고 했다.
-- 추가 되는 과정 --
python3 manage.py shell # 장고에서 동작할 코드를 대화형으로 실행시킬 수 있음.
아래에 데이터 생성하는 방법을 참고하여 5개정도 만들어보자.
# 데이터 저장하기
>>> from app_2th.models import Person
>>> person = Person.objects.create(first_name="Chang Woo", last_name="Choi")
>>> person.save()
# 데이터 확인하기
>>> check = Person.objects.all()
>>> check[0]
'<Person: Person object (1)>'
>>> check[0].first_name
'Chang Woo'
>>> check[0].last_name
'Choi'
위에서 저장한 데이터를 웹에서 띄워보자.
아까 변경해주지 않았던 아래 두가지를 변경해준다.
from django.urls import path
from . import views
urlpatterns = [
path('person/',views.person,name="person")
]
from django.shortcuts import render
from .models import Person
# Create your views here.
def person(request):
context = {
'persons':Person.objects.all()
}
# requests에 대해 person.html로 context를 넘긴다.
# html로 넘기는 변수는 항상 dict 형태여야하며,
# html에서 변수로 사용되는 이름은 dict의 key이다.
return render(request,'person.html',context)
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Persons</title>
</head>
<body>
{% for person in persons %}
<div>
<h4>{{ person.last_name }}</h4>
<h4>{{ person.first_name }}</h4>
<p>
{{ item.content }}
</p>
</div>
{% endfor %}
</body>
</html>