Language/Python Python 모델클래스/마이그레이션과 DB/장고 어드민/데이터 보여주기
  • 728x90
    반응형

     

     

    목차

       

      모델 클래스

      📌 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)

       

      결과

       

      728x90
      반응형
    상단으로