본문 바로가기
django

2 - Django Template과 Model

by shinminkyoung 2024. 5. 22.

 

[객체지향 프로그래밍]

1. 객체지향 프로그래밍이란?

'객체' 간의 상호작용으로 프로그램을 구성하는 프로그래밍 기법

 

<객체지향이론>

실제 세계는 객체로 이루어져 있으며 발생하는 모든 사건들은 객체 간의 상호작용이다

->(프로그래밍에 도입)->

<객체지향 프로그래밍>

ex. python, java, C# etc.

 

2. 객체란?

사물과 같이 유형적인 것뿐만 아니라, 개념이나 논리와 같은 무형적인 것을 포함

객체는 속성과 기능으로 이루어져 있음

 

3. 객체지향 프로그래밍

1) 프로그램을 명령어의 집합이 아니라, 객체 간의 협력 관계로 보고 개발하는 것

2) 실제 사물의 속성과 기능을 분석한 다음, 이를 각각 변수와 함수로 정의

 

4. 클래스란?

객체지향 프로그래밍에서 객체의 설계도 혹은 틀

 

<무지성 클래스 생성의 문제점>

1) 중복되는 패턴 발생

2) 만약 속성을 추가한다면 각각의 클래스에 일일이 코드를 추가해야 함

3) 구조에 대한 명확한 정의가 없어 서로 다른 속성 구조를 가지게 될 수 있음

 

-> 클래스 하나로 객체를 찍어낼 수 있게 하자

 

5. __init__ 함수

객체가 생성될 때 초기화하는 함수

class BabyLion:
	def __init__(self):   //  클래스에 있는 메서드는 self를 가장 첫 번째 매개변수로 가짐
    	self.name = "라이언"
        

lion = BabyLion()  // 클래스의 메서드를 호출할 때, 해당 메서드를 호출한 객체가 self로 전달

 

 

클래스를 호출한다는 것은, 기본적으로 클래스의 __init__ 메서드를 호출하는 것

(다시 말해, 클래스를 초기화하는 것)

 

lion = BabyLion("라이언", 3)

		=
        
lion = BabyLion.__init__("라이언", 3)

 

if) __init__ 메서드 밖에서 속성을 정의한다면?

클래스와 객체 모두가 공유하는 속성이 됨 

class BabyLion():
	name = '라이언'
    points = 3
    
print(BabyLion.name)

ssulion = BabyLion()
print(ssulion.name)

 

6. __str__ 함수

클래스를 어떤 문자열로 보여지게 할지 정하는 메서드

 

객체를 print하면 자동으로 __str__ 함수 실행

 

class BabyLion():
	def __init__(self, name, points):
    	self.name = name
        self.points = points
       
    def info(self):
    	print(f'이름: {self.name}, 점수: {self.points}')
        
    def __str__(self):
    	return f'이름: {self.name}, 점수: {self.points}'
        
 ssulion = BabyLion('라이언', 3)
 ssulion.info() # ssulion.info()
 print(ssulion) # ssulion.__str__()

 

 7. 상속

물려받은 클래스에서 부모 클래스의 속성과 메소드를 사용할 수 있음 

 

class 부모클래스:
	... 내용 ...

class 자식클래스(부모클래스):
	... 내용 ...

 

 

[include를 이용하여 계층적으로 URL 관리하기]

1. url을 효율적으로 관리하자

path를 단순 나열해두면 path가 많아졌을 때 관리가 어려움

->

앱마다 개별적인 urls.py를 만들고 프로젝트 폴더의 urls.py에서는 각 앱의 urls.py 파일을 include 함수를 통해 관리 

 

(수정 전 방식)

하나의 urls.py에 모든 경로가 들어감

 

(계층전 URL 방식)

앱마다 url.spy를 생성한 후, include 함수로 각 앱 별 urls.py를 연결

 

장점

1) 유지보수 편리

2) 재사용성 높아짐

 

[Template 이용해보기]

1. Template이란?

사용자에게 보여지는 화면

 

2. 탬플릿 태그란?

탬플릿(HTML) 내부에서 파이썬 코드를 사용할 수 있게 하는 태그

 

views.py 

(render(request, 'template.html', data))

->(데이터)->

template.html

{{data}}

 

[Model 만들어보기]

1. 프론트엔드 / 백엔드

1) 프론트엔드: 폭넓은 의미로는 사용자가 서비스를 이용할 때 쓰게 되는 웹, 앱 등

2) 백엔드: 서비스에 필요한 모든 데인터를 저장하고 다루는 공간

서비스에 필요한 데이터들을 저장하고 클라이언트를 위해 알맞게 가공하는 역할

(목적에 맞게 데이터들을 끌어와서, 필요없는 건 빼고 필요한 건 살리는 작업)

 

2. 데이터베이스란?

서비스에 필요한 데이터들을 저장하는 창고

 

3. DBMS란?

Database Management System

데이터베이스를 관리해주는 소프트웨어

ex. MySQL, ORACLE, mongoDB, SQLite etc.

 

1) RDBMS: 데이터를 표(테이블) 형태로 저장 ex. MySQL

2) NoSQL: 데이터를 비구조적인 형태로 저장 ex. mongoDB

 

4. SQL이란?

관계형 데이터베이스에 명령을 내릴 때 사용하는 언어

SQL을 사용해 데이터를 조회, 삽입, 수정, 삭제할 수 있음

 

5. 장고의 디폴트 DBMS

장고는 기본적으로 SQLite3라는 DBMS 제공

1) 데이터를 한 눈에 확인하기 어려움

2) 보통 프로젝트할 때 MySQL을 더 많이 사용

 

6. MySQL & MySQL Workbench

1) <MySQL>

RDBMS의 일종으로, 데이터베이스를 관리하고 엑세스할 수 있도록 해주는 소프트웨어

 

2) <MySQL Workbench>

일종의 에디터

mysql 명령어를 쓰지 않아도 클릭 몇 번으로 시각적으로 편리하게 DB 관리 가능

MySQL과 완전히 통합되어 있음

 

7. mysqlclient 설치

장고와 MySQL 데이터베이스를 연결시키기 위해서는 mysqlclient 필요

$ pip install mysqlclient

 

8. Model이란?

데이터베이스와 상호작용하는 부분

Model은 데이터베이스 테이블을 클래스 형태로 나타낸 것

Model 하나하나가 데이터베이스 테이블

 

 

1) DBMS를 MySQL로 바꾸기

Workbench에서 database 생성

-> create database employeedb;

 

settings.py의 DATABASES 부분 수정

 

잘 연결되었는지 확인하기

-> $ python3 manage.py inspectdb

(연결된 데이터베이스의 테이블들을 자동으로 Model로 바꿔주는 명령어)

 

2) Model 만들기

모든 모델들은 models.Model을 상속

 

3) makemigrations

Model에서 변경사항을 DB에 적용하기 위해 마이그레이션 파일 만들기

-> $ python3 manage.py makemigrations

 

각각의 마이그레이션 파일은 생성된 시점의 Model의 구조 (DB 구조)를 가지고 있음

데이터베이스를 Git처럼 버전을 나누어 관리하기 위해 마이그레이션 파일을 사용

 

4) migrate

마이그레이션 파일들을 적용하는 명령어

Model의 변경사항을 DB에 실제로 반영하는 시점

$ python manage.py migrate

 

5) DB 확인

use employeedb; # 사용할 데이터베이스 선택

show tables; # 데이터베이스에 있는 테이블을 보여줌

 

insert into [테이블명] values();  # 테이블에 데이터 삽입

select *from[테이블명]  # 테이블에 존재하는 모든 데이터 가져오기

 

 

'django' 카테고리의 다른 글

모델링과 마이그레이션 (2)  (3) 2025.01.15
모델링과 마이그레이션 (1)  (4) 2025.01.15
장고에 대하여  (7) 2025.01.07
3 - ORM과 Django Rest Framework (1)  (2) 2024.05.23
1 - web과 Django 기초  (4) 2024.05.11