[Django] - 6. model 사용하기

최창우·2022년 9월 8일
0

Django

목록 보기
7/10
post-thumbnail

📜 Django 모델에 대해 알아보자.

📕 Model이란?

데이터를 처리하기위해 사용하는 하나의 정의된 소스

보통 데이터베이스에서 데이터를 저장하고 조회하기위해 SQL문을 이용해야하지만
장고에서는 모델을 사용하면 SQL 쿼리문의 도움없이 데이터를 처리할 수 있다.

📖 특징

  1. 각각의 모델은 파이썬 클래스이다. (django.db.models.Model의 subclass)
  2. 클래스의 각 속성은 데이터베이스의 컬럼과 연결된다.
  3. 장고는 자동으로 생성된 DB 접근 API를 제공한다.

📕 준비

📖 필요한 작업

  1. django-start 폴더에서 app폴더 하나더 생성
  • python3 manage.py startapp app_2th
  1. project/setting.py 에서
INSTALLED_APPS = 
[ 'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'app',
'app_2th', # 추가항 ]
  1. project/urls.py 변경
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),
]
  1. app_2th/urls.py 생성 (아직 연결할 경로없음)
  2. app_2th/views.py 변경 (아직 연결할 메서드 없음)

📕 모델생성

📖 app_2th/models.py

# 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 라고 했다.

  1. 사용자가 url에 접속
  2. 통합된 project/urls.py 에서 연동된 url로 연결해줌
  3. app/urls.py 에 정의된 경로에 연결
  4. app/views.py 에 정의된 메서드를 실행

-- 추가 되는 과정 --

  1. 정의된 모델을 통해 데이터 처리
  2. template를 기반으로 하여 Return 해줄 HTML 코드 생성
  3. 클라이언트가 Return 받은 HTML을 렌더링

📖 데이터 추가하기

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'

📖 웹에 띄우기

위에서 저장한 데이터를 웹에서 띄워보자.

아까 변경해주지 않았던 아래 두가지를 변경해준다.

  1. app_2th/urls.py 생성
from django.urls import path
from . import views

urlpatterns = [
    path('person/',views.person,name="person")
]
  1. app_2th/views.py 변경
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)
  1. person.html 생성
<!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>
profile
유능한 개발자가 되고 싶은 헬린이

0개의 댓글