일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 금융IT #코스콤 #금융보안원 #금융경제연구소
- 배달의 명수 #배달의 민족
- 텔레그램 #가해자처벌 #청원동의 #n번방 #박사방
- 오거돈 #부산시장 #오거돈시장 성추행 #오거돈 사퇴
- 코로나19 #복수 여권 #교통비할인
- 5G #5G단점 #5G 4G
- BCG # 불주사 # 코로나 불주사
- Today
- Total
nul-problog
[Django/장고 tutorial 2] 데이터베이스(model 생성, API 사용) 본문
앱 생성하는 법
https://nul-problg.tistory.com/38
[Django/장고 tutorial 1] 장고 app(app 생성, 서버 구동)
시작하기전! 우선 해야하는 것은 1. python 설치 https://www.python.org/ Welcome to Python.org The official home of the Python Programming Language www.python.org 2. 장고 설치하기 장고를 설치하는 방법에는 여러가지가 있지
nul-problg.tistory.com
https://docs.djangoproject.com/en/2.2/intro/tutorial02/
참고하여 진행
Django
The web framework for perfectionists with deadlines.
docs.djangoproject.com
데이터베이스 설정
데이터베이스 종류는 오라클 , PostgreSQL등 많지만 경량 데이터베이스인 SQLite 를 가장 많이 사용
말이 경량 데이터베이스일 뿐 프로젝트를 진행하는 것에 있어 문제가 없음
만약 데이터베이스를 변경하고자 한다면 mysite/settings.py 에서 데이터베이스 종류를 변경 가능
'ENGINE':
'django.db.backends.sqlite3', 'django.db.backends.postgresql', 'django.db.backends.mysql', 'django.db.backends.oracle'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # 데이터 베이스 기본적으로 sqlLite 를 많이 사용함. 다른 백엔드를 사용하려면 이곳에서 변경
'NAME': BASE_DIR / 'db.sqlite3', #데이터베이스의 이름. SQL Lite를 사용하는 경우 데이터베이스는 컴퓨터의 파일이 됨
}
}
mysite/settings.py 에서 INSTALLES_APPS은 장고 인스턴스에서 활성화된 장고 애플리케이션의 이름들 , 이러한 앱들을 사용하겠다는 것을 의미
- 장고에서 기본적으로 제공하는 어플리케이션
NSTALLED_APPS = [
'django.contrib.admin', # 관리 사이트
'django.contrib.auth', # 인증 시스템
'django.contrib.contenttypes', # 콘텐츠 유형에 대한 프레임워크
'django.contrib.sessions', # 세션 프레임워크
'django.contrib.messages', # 메시지 프레임워크
'django.contrib.staticfiles', # 정적 파일 관리를 위한 프레임워크
]
기본적으로 제공하는 어플리케이션들은 최소한 하나 이상의 데이터베이스들을 사용
따라서 데이터베이스 테이블을 미리 만들 필요가 있기 때문에 migrate 명령어를 실행
$ python manage.py migrate
모델 만들기
장고에서 말하는 model 이란 데이터베이스의 구조(layout)을 말함
- polls앱에 필요한 Question, Choice 모델 생성.
polls.models.py
from django.db import models
#두개의 데이터베이스를 만듦 Question,Choice
class Question(models.Model):
question_text = models.CharField(max_length=200) #질문내용 ,문자필드
pub_date = models.DateTimeField('date published') #생성날짜 , 날짜/시간 필드
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE) #선택지에 해당하는 질문, ForeignKey외래키 Question내를 가리킴
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0) #표 수
생성한 모델 Question, Choice 을 활성화 시키도록함
모델 활성화
mysite/settings.py 의 INSTALLES_APPS에 polls앱을 추가해야함
INSTALLED_APPS = [
'polls.apps.PollsConfig', # 만든 polls 앱 PollsConfig 등록하기
'django.contrib.admin', # 관리 사이트
'django.contrib.auth', # 인증 시스템
'django.contrib.contenttypes', # 콘텐츠 유형에 대한 프레임워크
'django.contrib.sessions', # 세션 프레임워크
'django.contrib.messages', # 메시지 프레임워크
'django.contrib.staticfiles', # 정적 파일 관리를 위한 프레임워크
]
이를 통해 장고는 polls 앱이 포함되었다는 것을 알 수있게 됨
makemigration 명령어는 우리가 작성한 모델을 migration이라는 장소에 데이터베이스내의 테이블을 생성할수 있도록 설계도를 만드는 작업을 하는 것이라고 생각하면됨
명령어를 입력하면,
$ python manage.py makemigrations polls
아래와 같은 결과가 나온다.
Migrations for 'polls':
polls/migrations/0001_initial.py
- Create model Question
- Create model Choice
migrate 명령어를 통해 데이터베이스 내의 실제 테이블을 생성하는 작업을 할 수있다.
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
Rendering model states... DONE
Applying polls.0001_initial... OK
데이터베이스 내의 테이블을 생성했으니,Python 쉘을 통해 Django API를 사용할 수 있다.
* API란?
개발자가 필요로하는 데이터를 사용할 수 있도록 만들어놓은 함수 또는
서버나 데이터베이스에게 데이터를 입력할수 있도록 만들어놓은 함수라고 생각하면 됨
- Python 쉘 실행
$ python manage.py shell
- 만든 모델(Choice, Question) 을 사용하겠다고 추가 하는 작업
>>> from polls.models import Choice, Question
- Question내의 모든 모델을 불러오기
>>> Question.objects.all()
<QuerySet []>
-> 등록된 데이터가 없기 때문에 빈 내용이 출력
- Question내의 데이터 생성
>>> from django.utils import timezone
-> Question 모델에는 질문과 발행일이 있었음. 발행일 시간을 입력학 위해서 timezone 라이브러리를 import
- Question 데이터 하나 추가
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.save()
- id 확인 해보기
>>> q.id
1
-> id 는 모델을 생성할때 사용자가 명시를 하지 않더라도 장고에서 자동으로 만들어 주는 필드 중 하나이다.
- 입력한 데이터 확인 (텍스트와 등록일)
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2022, 11, 15, 6, 48, 27, 869435, tzinfo=<UTC>)
- 텍스트 변경
>>> q.question_text = "What's up?"
>>> q.save()
- 다시 Question내의 모든 모델을 불러오기
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>
- > 입력한 오브젝트가 한개 있음을 확인
이러한 방법(objects.all()) 은 어떤 데이터인지 구분이 어려움
아래와 같은 방법으로 모델내의 메소드를 사용하면 보고 싶은 문구를 확인 가능
- polls.models.py 파일의 Choice, Question 모델에 __str__()메소드 추가
class Question(models.Model):
question_text = models.CharField(max_length=200) #질문내용 ,문자필드
pub_date = models.DateTimeField('date published') #생성날짜 , 날짜/시간 필드
def __str__(self):
return self.question_text
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE) #선택지에 해당하는 질문, ForeignKey외래키 Question내를 가리킴
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0) #표 수
def __str__(self):
return self.choice_text
- 개발자가 필요로 하는 커스텀 메소드 추가
from django.utils import timezone
class Question(models.Model):
# ...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
-> 현재시각 - 하루 전시각
- 변경 사항 저장하고 다시 shell을 시작
$ python manage.py shell
>>> from polls.models import Choice, Question
>>> Question.objects.all()
<QuerySet [<Question: What's up?>]>
-> quetion_text 출력
- '모델클래스.objects.filter()' 를 통해 조건에 맞는 데이터 조회
>>> Question.objects.filter(id=1)
<QuerySet [<Question: What's up?>]>
>>> Question.objects.filter(question_text__startswith='What')
<QuerySet [<Question: What's up?>]>
- 현재년도와 등록년도가 동일한 question 텍스트 조회
>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)
<Question: what's up>
* timezone 참고문서
https://docs.djangoproject.com/ko/4.1/topics/i18n/timezones/
Django
The web framework for perfectionists with deadlines.
docs.djangoproject.com
데이터베이스 데이터를 장고 admin을 통해서도 확인 가능하다.
다음은 admin~
'Django' 카테고리의 다른 글
[ERROR] Django http 통신 http: error: argument REQUEST_ITEM: '' is not a valid value Error (0) | 2022.12.07 |
---|---|
[Django/장고] Django - Mysql 연동하기 (2) | 2022.12.04 |
[Django/장고 tutorial 1] 장고 app(app 생성, 서버 구동) (1) | 2022.11.21 |
[Django/장고 tutorial 4] View (view 사용, html 연결) (0) | 2022.11.17 |
[Django/장고 tutorial 3] admin 사용 (0) | 2022.11.16 |