Language/Python

Python 모델클래스/마이그레이션과 DB/장고 어드민/데이터 보여주기

Dexter_- 2017. 8. 10. 18:11
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
    반응형