Python 모델클래스/마이그레이션과 DB/장고 어드민/데이터 보여주기
목차
모델 클래스
📌 app과 관련된 정보를 저장할 model
- 모델클래스는 앱안의 models.py에 정의 한다.
- 모델 class는 models.Model 을 상속 받아야 한다.
- 모델 class안의 멤버 변수의 field에 대한 정보는 Field types를 참고해주세요.
? django에서 보통 model 이름은 대문자로 시작하고 단수형으로 쓴다.
#C:\Code\mysite\elections\models.py
class Candidate(models.Model):
name = models.CharField(max_length=10)
introduction = models.TextField()
area = models.CharField(max_length=15)
party_number = models.IntegerField(default=0)
마이그레이션과 DB
📌 DB를 쓰는 이유 : 프로그램은 종료되는 순간 memory상에서 사라지므로, 계속 데이터를 보존하기 위해 DB를 사용.
🎯 모델을 DB에 저장하기 위한 준비 과정
- mysite\settings.py - INSTALLED_APPS 리스트에 elections(앱이름) 추가
아래와 같이 db.sqlite3 의 마지막 저장 시간을 알아둔다.
- mysite 폴더로 이동 후 python manage.py makemigrations 입력
입력 후 다음과 같이 DB 초기화 파일이 생성된 것을 확인한다.
- python manage.py migrate 로 DB에 공간 만들기
위 와같이 DB 공간이 생성되면 LastWriteTime 이 변경된 것을 확인할 수 있다.
#C\Code\mysite\settings.py
...
INSTALLED_APPS = [
...,
'elections' #추가
]
...
장고 어드민
📌 admin으로 접속
🎯 admin 사용자 만들기
- 프로젝트 폴더로 이동
- python manage.py createsuperuser 실행
- 유저 이름과 email, password 설정
🎯 서버 실행
- python manage.py runserver
🎯 admin
- 브라우저에서 admin:localhost:8000/admin 으로 접속
- 1에서 만든 사용자로 접속
📌 Candidate 등록
- app 폴더의 admin.py에 model에서 정의한 Candidate를 regist
- 브라우저를 새로고침 하면 Candidate가 반영된다.
- Candidate - ADD CANDIDATE - 내용을 추가하고 SAVE -> object가 추가된다.
💡 만약 위 과정중 실수로 잘못된 절차를 진행했다면 아래 명령어로 데어터 베이스를 삭제한다.
python mange.py flush --database DB_NAME
위 명령을 실행하면 특정 DB를 삭제한다. --database 설정을 안하면, 현재 사용중인 DB를 알아서 선택한다.
DB를 잘못 만든경우 db.sqlite3 파일을 삭제하면 된다.
Object를 구분하는 방법
📌 python에서는 object를 표현하는 문자열을 정의할 때는 __str__
메소드를 오버라이딩 한다. 예를 들어 위에서 등록한 Candidate의 이름으로 object를 표현하고 싶은 경우 아래와 같이 수정한 후 브라우저를 새로고침 하면 후보자 이름이 보인다.
#C\Code\mysite\elections\models.py
from django.db import models
class Candidate(models.Model):
...
def __str__(self):
return self.name #object 를 출력하면 name이 보인다.
데이터 보여주기
📌 DB에 모델이 저장된 구조
candidate 테이블에서 각 데이터 필드는 column(열)으로, 각 Candidate의 정보는 row(행)으로 저장되어 있다.
📌 데이터에 접근하는 방법
Candidate 테이블에 등록한 정보를 보기 위해서는
from django.shortcuts import render
from django.http import HttpResponse
from .models import Candidate #models 에 정의된 Candidate를 import
# Create your views here.
def index(request):
candidates = Candidate.objects.all() #Candidate에 있는 모든 객체를 불러온다.
str = '' #마지막에 return해 줄 문자열이다.
for candidate in candidates:
#<br>은 html 에서 다음 줄로 이동하기 위해 쓰인다.
str += "<p>{} 기호{}번({})<br>".format(candidate.name, candidate.party_number, candidate.area)
str += candidate.introduction + "</p>" #<P>는 html에서 단락을 바꾸기 위해 쓰인다.
return HttpResponse(str)
결과