728x90
- Model
- 단일한 데이터에 대한 정보를 가짐
- Django는 model을 통해 데이터에 접속하고 관리
- 각각의 model은 하나의 데이터베이스 테이블에 매핑 됨
- 웹 애플리케이션의 데이터를 구조화하고 조작하기 위한 도구
- DB 데이터베이스
- 체계화된 데이터의 모임
- Query 쿼리
- 데이터를 조회하기 위한 명령어, 조건에 맞는 데이터를 추출하거나 조작하는 명령어
- Query를 날린다. => DB를 조작한다.
- Schema 스키마
- 데이터베이스에서 자료의 구조, 표현방법, 관계 등을 정의한 구조
- Tabel 테이블
- 열 : 필드 or 속성 (각 열에는 고유한 데이터 형식이 지정)
- 행 : 레코드 or 튜플 (테이블의 데이터는 행에 저장)
- 기본키 : 각 행의 고유값 Primary Key, 반드시 설정, DB 관리 및 관계 설정시 주요하게 활용
- ORM (Object Relational Mapping)
- 객체 지향 프로그래밍 언어를 사용하여 호환되지 않는 유형의 시스템 간에 데이터를 변환하는 프로그래밍 기술
- OOP 프로그래밍에서 RDBMS를 연동할 때, 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법
- 장점 : SQL의 절차적 접근이 아닌 객체 지향적 접근으로 인한 높은 생산성
- 단점 : ORM 만으로 완전한 서비스 구현하기 어려운 경우 있음
- 현재 웹 프레임워크의 요점은 웹 개발의 속도를 높이는 것 (생산성)
- 사용 이유 : DB를 객체로 조작하기 위해 ORM 사용
# 앱/models.py
class 이름(modles.Model):
# 길이 제한 문자열
title = models.CharField(max_length=10)
# 글자 수가 많을 때
content = models.TextField()
# 최초 생성 일자(날짜, 시간)
created_at = models.DateTimeField(auto_now_add=True)
# 최초 수정 일자
updated_at = models.DateTimeField(auto_now=True)
- Migrations
- Django가 model에 생긴 변화를 반영하는 방법
# models.py 입력
# 생성
python manage.py makemigrations
# 실제 DB에 반영
python manage.py migrate
# 마이그레이션에 대한 SQL 구문을 보기 위해 사용
python manage.py sqlmigrate app_name 0001
# 프로젝트 전체의 마이그레이션 상태를 확인하기 위해 사용
python manage.py showmigrations
- DB API
- DB를 조작하기 위한 도구
- Class Name.Manager.QuerySet API
- ex) Article.objects.all()
- Django shell
- 일반 Python shell을 통해서는 장고 프로젝트 환경에 접근할 수 없음
- 그래서 장고 프로젝트 설정이 load 된 Python shell을 활용해 DB API 구문 테스트 진행
pip install ipython
pip install django-extensions
# settings.py
INSTALLED_APPS = [
...
'django_extensions',
...
]
python manage.py shell_plus
- CRUD
# 전체 객체 조회
>>> classname.objects.all()
# class로부터 instance
>>> class = classname()
# 저장 방법
# save 하기 전까지 DB에 저장되지 않음, 저장 후 객체의 ID 값을 알 수 있음
>>> class.title='first'
>>> class.content='django'
>>> class.save()
>>> class = classname(title='second', content='django!!')
>>> class.save()
>>> classname.objects.create(title='third', content='django!!!!!')
# 주어진 lookup 매개변수와 일치하는 객체를 반환
# 없으면 DoesNotExist
# 둘 이상이면 MultipleObjectsReturned
>>> classname.objects.get(content='django')
# 주어진 lookup 매개변수와 일치하는 객체를 포함하는 새 QuerySet을 반환
>>> classname.objects.filter(content='django')
# 삭제
>>> classname.delete()
- Admin Site
python manage.py createsuperuser
# auth에 관련된 기본 테이블이 생성되지 않으면 관리자 계정을 생성할 수 없음
# admin.py
from django.contrib import admin
from .models import classname
class classnameAdmin(admin.ModelAdmin):
list_display = ('pk', 'title', 'content', 'created_at', 'updated_at',)
# admin site에 register 하겠다.
admin.site.register(classname)
# views.py
def index(request):
# 게시글 순서 변경
class = classname.objects.all()[::-1]
# 내림차순
class = classname.objects.order_by('-pk')
- HTTP method
- GET
- 특정 리소스를 가져오도록 요청할 때 사용
- 반드시 데이터를 가져올 때만, DB에 변화 X, R
- POST
- 서버로 데이터를 전송할 때 사용
- 리소스를 생성,변경하기 위해 데이터를 HTTP body에 담아 전송, 서버에 변경사항을 만듦,C/U/D
- GET
- 사이트 간 요청 위조 방어
{% csrf_token %}
- redirect()
- 새 URL로 요청을 다시 보냄
- 브라우저는 현재 경로에 따라 전체 URL 자체를 재구성
# views.py
from django.shortcuts import render,redirect
def create(request):
...
return redirect('app_name:index')
728x90
반응형
'TIL - 프로그래밍 > 개념, 설정' 카테고리의 다른 글
[Python] Queue2 (우선순위큐, 버퍼) (0) | 2022.03.17 |
---|---|
[Python] Queue1 (선형큐, 원형큐) (0) | 2022.03.17 |
[Python] Django 1 (0) | 2022.03.14 |
[Python] 인접 행렬,인접 리스트 만들기(pprint) (0) | 2022.03.12 |
[Python] 순열, 재귀 (0) | 2022.03.08 |
댓글