본문 바로가기
TIL - 프로그래밍/개념, 설정

[Python] Django 2

by chaemj97 2022. 3. 15.
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
  • 사이트 간 요청 위조 방어
{% csrf_token %}
  • redirect()
    • 새 URL로 요청을 다시 보냄
    • 브라우저는 현재 경로에 따라 전체 URL 자체를 재구성
# views.py
from django.shortcuts import render,redirect

def create(request):
	...
    return redirect('app_name:index')
728x90
반응형

댓글