django 챕터 2 정리

김재효·2023년 5월 5일
0

데이터 베이스(Database)

  • 공유의 목적으로 통합 관리된느 자료의 집합
  • 논리적으로 연관된 하나 이상의 자료의 모음으로 내용을 구조화하여 검색과 갱신의 효율화한 것

데이터베이스는 중복을 없애고 자료를 구조화 하여 기억시켜 놓은 자료의 집합체

데이터베이스 특징

  • 실시간 접근성
    - 사용자의 요구를 즉시 처리할 수 있다
  • 지속적인 변화
    - 정확한 값을 유지하려고 삽입삭제수정 작업 등을 이용해 데이터를 지속적으로 갱신할 수 있다
  • 동시 공유
    - 동시에 여러 사람이 동일한 데이터에 접근하고 이용가능
  • 내용에 대한 참조
    - 사용자가 요구하는 데이터의 내용, 즉 데이터 값에 따라 참조할 수 있어야 한다

데이터베이스 관리 시스템(DB라고 부름)

  • 데이터베이스 내의 데이터를 접근할 수 있도록 해주는 소프트웨어
  • 사용자 또는 다른 프로그램의 요구를 처리하고 응답하여 데이터를 사용할 수 있도록 함

데이터베이스 관리 시스템 장단점

장점

  • 데이터 중복 최소화하고 데이터의 독립성 확보
  • 데이터를 동시 공유하고 보안이 향상됨
  • 데이터 무결성을 유지하고 장애 발생시 회복이 가능

단점

  • 비용이 많이 발생함
  • 백업과 회복 방법이 복잡하고 중앙 집중 관리로 인한 취약점이 존재

데이터베이스 관리 시스템 기능

ORM

  • ORM은 객체와 데이터베이스의 관계를 매핑해주는 도구이다. 즉, django의 ORM이란, 파이썬과 데이터베이스의 SQL사이의 통역사 역활을 해준다고 생각하면 된다

장단점

  • 장점은 재사용 및 유지보수에 용이하다.
  • 단점은 프로젝트가 복잡한 경우 난이도가 상승한다.

model

  • 데이터를 관리하는 역할
  • 데이터베이스에 저장할 테이블 정의
  • 모델에 작성된 코드를 기준으로 데이터베이스 생성

models에서 사용하는 필드


AutoField

  • ID(pk)로 사용 가능한 자동으로 증가하는 IntegerField 다. 직접 사용할
    필요는 없다. 모델의 기본키 필드는 별도로 지정하지 않으면 자동으로
    추가됨.

ImageField

  • FileField 로 모든 속성과 메소드를 상속받지만, 업로드된 객체가 유효한
    이미지인지 검증한다.

장고 시작

가상 환경 생성(terminal 에서 실행)

python -m venv venv

가상 환경으로 이동

.\venv\Scripts\activate

pip 버전 업그레이드

pip install –upgrade pip(만약 장고에서 버전 오류가 나면 python.exe -m
pip install --upgrade pip)

장고 설치

pip install Django

장고 프로젝트를 생성

django-admin startproject config .

장고 앱 생성

django-admin startapp posts
config > settings.py > installed_apps > posts 추가

장고 ORM 시작

class 생성

models.py 에 모델을 생성

인스타 게시글을 만들기 때문에 먼저 이미지라는 변수명에는 imagefield
텍스트에는 내용이 긴 텍스트도 포함하기 위해 textfield
작성일을 사용하기 위해 시간과 날짜에 사용하는 datetimefield
마지막으로 조회수도 포함하기 위해 정수형을 인식하는 integerfield 를 사용한다.

이렇게만 만들어도 생성은 되지만 각 필드에 대한 사용자의 이름을
지정합니다.

DB 적용

  • 장고는 ORM 을 사용하기 때문에 models.py 와 클래스를 통해
    db 스키마를 생성하고 컨트롤 하게 되는데 이 때 db 스키마를 git 처럼
    버전으로 나눠서 관리 할 수 있게 해 주는 시스템

migrations 생성

python manage.py makemigrations

pillow 오류는 이미지를 사용하는데 꼭 필요한 패키지기 때문에 설치가 필요함.
python -m pip install Pillow
다시 python manage.py makemigrations 실행

테이블이 생성 되었고 우리가 만들지 않은 id 값은 bigautofield 라고 되어 있지만 장고를 실행하면 integerfield 로 들어간다.
primary key는 기본키이고 꼭 필요함

테이블 생성

python manage.py migrate

테이블이 많이 생긴 이유는 장고에서는 기본적으로 인증시스템과 유저모델도 만들어 주기 때문에 그 테이블이 다 생긴 것

#0001 intial.py
데이터베이스가 생성되었고 이 파일을 기준으로 생긴거기 때문에 나중에
마이그레이션이 꼬이면 직접 수정이 필요할 수도 있습니다.

사용자 모델 생성

장고에서 기본적으로 만들어지는 사용자 데이터를 생성 할 것입니다.
python manage.py createsuperuser

실행하면 username 은 admin

email 은 엔터로 건너뛰고

password 12 로 설정하고 엔터(password 는 노출 문제로 따로 표시가 안됨)

password 확인도 12

보안적으로 챙겨주는 것이 있는데 저희는 테스트 할려고 하는거기 때문에 건너뜀.

이 데이터를 보기 위해서는 별도 외부프로그램을 추후에 쓸거지만 지금은 확장프로그램으로 진행함.

확장 > sqlite > 설치
db_sqlite3 > 마우스 오른쪽 클릭 > open database
auth_user 클릭하면 사용자 테이블이 나오는데 이것은 우리가 만든 사용자 데이터입니다.

인스타그램 댓글 만들기

보기 > 명령 팔레트 > 파이썬 인터프리터 > venv 지정

댓글도 게시글과 동일하게 내용과 작성일을 작성하고 게시글이랑 관계를 구성해야 되기 대문에 post 변수명 지정후 ForignKey 를 사용한다.

ForignKey 는 테이블의 필드 중에서 다른 테이블의 행과 식별할 수 있는 키(즉 게시글과 연결하기 위해 필요함)

post 에서 ‘Post’를 입력해주고 on_delete 는 게시글이 삭제되었을 때 같이 삭제되기 위해서 써준다.

사용자 연결은 writer 로 변수 지정하고 to=에는 사용자 모델을 넣어야 되는데 장고 유저 모델을 생성하고 함수를 만들어 줍니다

나중에가면 유저모델을 새로 커스텀을 하는데 그때도 이 코드를 그대로 사용할 것.
writer to=’User’을 넣어줍니다.

이미지 같은 경우는 경로 같은 것을 설정해줘야되는데 추후에 진행할 예정이고 지금은 null 과 blank 를 넣어줍니다.

auto_now_add 는 생성이 되면 자동으로 입력해주는 속성도 넣어주고 조회수는 따로 속성을 안줘도 되기 때문에 기본값으로 지정해준다.

게시글 작성자가 들어가야 되기 때문에 writer 를 생성해줍니다

작성자 같은 경우도 실습할 때 번거러워 질 수 있기 때문에 null 과 blank 를 넣어줍니다.

db 연결

다시 python manage.py makemigrations 실행
python manage.py migrate

실행한 후 sqlite explorer 우측 상단에 새로고침 해줘야됨.

사용자도 일대 다인데 사용자가 1 post 가 다 댓글에서도 게시글이 1 comment 가 다이다.

모델을 참고하는데 ForignKey 를 사용할때는 User 와 on_delete 는 필수로 들어가야 한다.

0개의 댓글