[웹프로그래밍 기초] Django를 이용한 데이터베이스(DB) 구축하기
2020. 6. 10. 17:49ㆍ노트/Django : 웹
새로운 가상환경 생성
- Django > orm이라는 새로운 폴더 생성
- python -m venv venv 명령어로 새로운 가상환경 만들어주기
- 가상환경 실행
- pip install django==2.2.13 으로 장고 설정
- TERMINAL에 django-admin startproject orm . 로 orm 폴더 생성
- TERMINAL에 python manage.py runserver 로 서버 생성
settings.py 에서 LANGUAGE_CODE = 'ko-kr' , TIME_ZONE = 'Asia/Seoul'로 변경
- TERMINAL에 python manage.py startapp articles 라는 명령어로 App 생성
settings.py 에서 INSTALLED_APPS = 'articles', 추가
App
- VSCode 하나 더 열어서 새로운 Python 파일 생성
TIL > Web_python이라는 새로운 폴더 생성 > VSCode로 열어서 폴더에 person.py파일 생성
class Person(): # 클래스
name = '사람의 고유한 속성' # 클래스 변수
age = '출생 이후부터 삶을 마감할 때까지의 기간'
# instance가 행할 행위(메소드)
def greeting(self):
print(f'{self.name}이 인사합니다. 안녕하세요.')
def eating(self):
print(f'{self.name}은 밥을 먹습니다.')
def aging(self):
print(f'{self.name}은 {self.age}살이지만, 나이를 먹어가는 중입니다.')
# 클래스 - 사람(집단, 특성)
# 인스턴스 - 사람(개인)
# 메소드 - 사람(개인)이 가지고 있는 행위
# 클래스 변수 - 사람(집단, 특성)이 가지고 있는 공통 속성
# 인스턴스 변수 - 사람(개인)이 가지는 고유한 특성
# 인스턴트 생성
nayeon = Person() # 인스턴트
print(nayeon.name) # 인스턴트 변수 => 사람의 고유한 속성
print(nayeon.age) #=> 출생 이후부터 삶을 마감할 때까지의 기간
nayeon.name = '나연' # 인스턴트 변수에 값을 할당
nayeon.age = '27'
print(nayeon.name) #=> 나연
print(nayeon.age) #=> 27
print(Person.name) #=> 사람의 고유한 속성
print(Person.age) #=> 출생 이후부터 삶을 마감할 때까지의 기간
nayeon.eating() #=> 나연은 밥을 먹습니다
justin = Person()
print(justin.name) #=> 사람의 고유한 속성
justin.name = '재석'
print(justin.name) #=> 재석
print(nayeon.name) #=> 나연
# DB - Class
# 테이블 - 클래스
# 열(column) - 클래스 변수
# 행(row) - 인스턴스
# 행이 가지는 값들 - 인스턴스 변수
# 값들의 조합 or 가공 - 메소드 역할
- orm VSCode로 돌아와서 model 정의
articles > models.py에서 DB 스키마 설계도 정의해주는 것
1. models.py 작성 및 변경(생성 및 수정)
2. python manage.py makemigrations
-> migration(설계도) 파일 생성
3. python manage.py migrate
-> 실제 Database에 적용 (테이블 생성)
from django.db import models
# Create your models here.
# 데이터베이스 테이블 생성
class Article(models.Model):
# models.Model는 Django가 만들어놓은 기능으로 DB와 연동 가능하게 해줌
# id = models.AutoField(primary_key=True) - Model에서 알아서 생성해줘서 생략
title = models.CharField(max_length=100) # CharField는 길이제한 가지는 필드
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True) # 날짜, 시간 저장하는 필드
[Django Shell]
python manage.py shell
0. Model import
from articles.models import Article
1. Create
1-1. 첫번째
article = Article()
article.title = 'First'
article.content = 'Wow!'
article.save()
1-2. 두번째
article = Article(title='Second', content='two')
article.save()
1-3. 세번째
article = Article.objects.create( title = 'Third' , content = 'three')
2. Read
2-1. all() -> SELECT * # 복수 (0~여러개) (리스트)
articles = Article.objects.all()
2-2. filter() -> WHERE # 복수 (0~여러개) (리스트)
articles = Article.objects.filter(title='First')
2-3. get() # 단수(1개) (인스턴스) 무조건 1개만 리턴 필수
article = Article.objects.get(id=1)
article = Article.objects.get(pk=1) # id__exact
article = Article.objects.get(title='First')
article = Article.objects.get(pk=10) #Error
article = Article.objects.filter(pk=10) # []
2-4. Queryset (유사 리스트)
articles = Article.objects.all() # 복수
articles[0] # 첫번째 데이터 # -> 단수
articles.first() # 첫번째 데이터
articles[-1] # 마지막 데이터
articles.last() # 마지막 데이터
articles[1:3] # 2번째 ~ 3번째 데이터
(OFFSET 1, LIMIT 2)OFFSET , LIMIT
articles[OFFSET:OFFSET+LIMIT]
2-5. order_by()
article = Article.objects.order_by('created_at') # 오름차순
article = Article.objects.order_by('-created_at') # 내림차순
3. Update
(1) 데이터 가져오기 (<-from DB)
article = Article.objects.get(pk=1)
(2) 인스턴스 수정 (only Python)
article.content = 'Bye bye!'
(3) 인스턴스 저장 (->to DB)
article.save()
4. Delete
(1) 데이터 가져오기(<-DB)
article = Article.objects.get(pk=1)
(2) 인스턴스 삭제(-> DB)
article.delete()
'''
admin.py 설정
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ['id', 'title', 'created_at']
# Register your models here.
admin.site.register(Article, ArticleAdmin)
urls.py 설정
from django.contrib import admin
from django.urls import path
url patterns = [
path('admin/' , admin.site.urls),
]
'노트 > Django : 웹' 카테고리의 다른 글
[웹 프로그래밍 기초 ] django 관리자 계정 만들기 (0) | 2020.06.17 |
---|---|
[웹 프로그래밍 기초] Django를 활용한 웹 게시판 만들기 (2) | 2020.06.15 |
[웹프로그래밍 기초] Django로 검색어 출력하는 페이지 만들기 (0) | 2020.06.09 |
[웹프로그래밍 기초] Django 템플릿 언어 (0) | 2020.06.08 |
[웹프로그래밍 기초] django 설치 + 두 수를 곱한 결과를 보여주는 페이지 만들기 (0) | 2020.06.08 |