티스토리 뷰
튜토리얼 2에서는 튜토리얼 1에서 만든 mysite 프로젝트에 데이터베이스를 설치하고 첫 모델을 생성한 후, Django에서 자동 생성되는 관리자 사이트에 대해 짧게 소개한다고 되어있다.
데이터베이스 설치
데이터베이스 변경
기본적으로 장고는 SQLite을 사용하도록 되어있다고 한다. 이 SQLite는 Python에서 기본으로 제공되기 때문에 별도로 설치할 필요가 없지만 실제 프로젝트를 시작할 때에는, 좀 더 확장성 있는 데이터베이스를 사용하는 것이 좋다.
데이터베이스 변경은 mysite프로젝트 내 settings.py 파일에서 설정할수 있다. 이 파일은 데이터베이스 등 장고 설정을 모듈 변수로 표현한 모듈(파일)이다.
DATABASES 의 default 항목을 살펴보면 딕셔너리로
ENGINE 과 NAME이 있는데
ENGINE은 데이터베이스 매니지먼트 시스템
NAME은 데이터베이스의 이름이라고한다.
데이터베이스 테이블 만들기
settings.py 파일을 살펴보면 데이터베이스 말고도 다른 코드들이 있는데, 파일 윗쪽에 작성되어있는 이 INSTALLED_APPS는 사용하기 편리하도록 기본으로 제공는 어플리케이션들이 담겨져있다. 이 기본 어플리케이션들 중 몇몇은 최소한 하나 이상의 데이터베이스 테이블을 사용하기 때문에 데이터베이스의 테이블을 미리 만들어야한다. (이 코드에 본인이 작성한 app을 여기에 추가하여 app을 사용할 수 있다.)
django.contrib.admin – 관리용 사이트
django.contrib.auth – 인증 시스템
django.contrib.contenttypes – 컨텐츠 타입을 위한 프레임워크
django.contrib.sessions – 세션 프레임워크
django.contrib.messages – 메세징 프레임워크
django.contrib.staticfiles – 정적 파일을 관리하는 프레임워크
이 migrate 명령은 INSTALLED_APPS 의 설정을 탐색하여, mysite/settings.py 의 데이터베이스 설정과 app 과 함께 제공되는 database migrations에 따라, 필요한 데이터베이스 테이블을 생성한다고한다. (이migrate에 대해서는 좀 더 공부하도록하자!)
+마이그레이션은 모델에 대한 변경 사항(필드 추가, 모델 삭제 등)을 데이터베이스 스키마로 전파하는 Django의 방법이라고한다.
% python3 manage.py migrate
실제 실행 과정)
(django_tutorial) yujeong@xo-MacBook-Air mysite % python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
모델 만들기 (본질적으로, 모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조(layout)를 말한다.)
튜토리얼에서는 여론조사(polls) 앱에서 Question 과 Choice라는 두 가지 모델을 만드는데, Question는 질문과 발행일을 위한 두 개의 필드를 가지지며, Choice 선택 텍스트와 투표 집계를 위한 두 개의 필드를 가진다. 각각의 Choice``모델은 Question와 연관된다.
튜토리얼 안내대로 polls/models.py파일에 아래 코드를 작성하였다.
from django.db import models
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)# question을 가리키고 있는 key
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
추가적으로 Question타입에 대해 Choice는 1: many로 Choice 가 ForeignKey를 가지고 있다.
모델의 활성화
우리가 작성한 앱을 mysite프로젝트에 포함하기 위해 위에서 보았던 INSTALLED_APPS에 추가해야한다고한다.
(근데 어째서 'polls.apps.PollsConfig'라는 이름일까? 모듈을 살펴보니 polls 디렉토리 내부 models.py는 말 그대로 polls의 모델을 정의한 것이고 polls의 apps.py가 polls의 음.. 배포? 앱이라고하면 될듯하다. 그리고 이 apps.py 내부 함수명이 PollsConfig이기 때문에
INSTALLED_APPS 에 추가할 앱이름이 'polls.apps.PollsConfig' 였던 것이다. - 주의 -틀린 내용일 수 있음!)
이제 Django는 polls 앱이 포함된 것을 알게 되었다. makemigrations 명령어를 실행시켜보자.
이 makemigrations 명령어는 모델을 변경한 것(새로운 모델을 만들거나 변경)과 이 변경 사항을 migration으로 저장한다는 것을 반영해달라고 장고에게 알려준다.
% python3 manage.py makemigrations polls
실제 실행 과정) 위 명령어를 사용 후 나오는 Migration은 Django가 모델(즉, 당신의 데이터베이스 스키마)의 변경사항을 디스크에 저장하는 방법이다.
(django_tutorial) yujeong@xo-MacBook-Air mysite % python3 manage.py makemigrations polls
Migrations for 'polls':
polls/migrations/0001_initial.py
- Create model Question
- Create model Choice
다시 migrate 명령어를 사용하여 추가된 polls 앱에 대한 데이터베이스에 모델과 관련된 테이블을 생성하자.
(이때 하는 migrate 명령은 아직 적용되지 않은 마이그레이션을 모두 수집해 이를 실행하며(Django는 django_migrations 테이블을 두어 마이그레이션 적용 여부를 추적합니다) 이 과정을 통해 모델에서의 변경 사항들과 데이터베이스의 스키마의 동기화가 이루어진다.)
% python3 manage.py migrate
실행 과정 예시)
(django_tutorial) yujeong@xo-MacBook-Air mysite % python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
Applying polls.0001_initial... OK
API 가지고 놀기..?
먼저 API가 무엇일까 알아봤는데 개발자가 필요로 하는 데이터를 뽑아낼 수 있도록 만들어낸 함수 또는 서버에게 데이터를 입력할수 있도록 하는 함수
대화식 Python 쉘에 뛰어들어 Django API를 자유롭게 가지고 놀아봅시다. Python 쉘을 실행하려면 다음의 명령을 입력하면 된다.
% python3 manage.py shell
# shell에 들어가면 >>> 로 시작하며 shell을 끌 때는 contral + d 누르면 돌아간다
관리자 생성하기
관리 사이트에 로그인 할 수 있는 사용자를 생성하자
% python3 manage.py createsuperuser
% Username : 원하는 이름
% Email address : 원하는 이메일 주소
% Password: 원하는 패스워드 (입력 시 화면에 출력되지 않으니 주의)
% Password (again): 한번 더 입력
# 비밀번호가 짧거나 쉽다면 아래와 같은 안내가 나올 수 있으며 선택하면된다
This password is too common.
This password is entirely numeric.
Bypass password validation and create user anyway? [y/N]: y
# 최종적으로 생성하였다면 아래 메세지가 뜬다
Superuser created successfully.
개발 서버 시작
장고 관리자(admin) 사이트는 기본적으로 제공하고있어 따로 만들지 않아도 된다고한다. 장고는 모델 즉 데이터베이스를 ui가 존재하는 화면으로 관리할 수 있게끔 어드민을 바로 만들어준다.
이제 서버를 구동하여 admin 으로 접속하자.
% python3 manage.py runserver
서버를 구동하면 메인 로컬 도메인 뒤에 /admin/ 추가하면 접속할 수 있다. (http://127.0.0.1:8000/admin/)
위에서 입력한 admin 사용자 정보를 입력하면 내부로 이동할 수 있다.
관리 사이트에서 poll app 을 변경가능하도록 만들자
우리가 1챕터에서 만든 polls app이 보이지 않기 때문에 polls/admin.py에 코드를 추가해주자.
from django.contrib import admin
# 상대경로인 polls/models.py 모듈에 있는 Question class를 import 한다
from .models import Question
admin.site.register(Question)
코드를 추가하고 페이지를 세로고침하면 polls가 추가로 생성된 것을 확인 할 수 있다.
+ add를 누르면 Question에 내용을 추가할 수도 있고 그 외 다양한 작업을 할 수 있다.
내용 전문 및 출처 -djangoproject, youtube-명준MJ
'study > Django' 카테고리의 다른 글
Django - MtoM Field 없이 구현 (0) | 2022.07.06 |
---|---|
westarbucks 만들기 - models.py (0) | 2022.07.05 |
Django tutorial 따라하기 4 (0) | 2022.06.30 |
Django tutorial 따라하기 3 (0) | 2022.06.29 |
Django tutorial 따라하기 1 (0) | 2022.06.28 |
- Total
- Today
- Yesterday
- 커맨드 객체
- musma
- Magazine K
- Django tutorial
- Spring
- 암호화
- Python
- 혼자 공부하는 파이썬
- 한글 형태소 분석기
- 환경 변수 설정
- git공부
- 면접을 위한 CS 전공 지식 노트
- django
- 검색 결과 내 페이지네이션
- django.contrib.auth
- 회원가입
- 톰캣
- 디자인 패턴
- authenticate()
- git 공부
- 웹페이지
- API
- 회원 로그인
- 배열
- Java
- path variable
- error: failed to push some refs to 'https://github.com/
- python3
- django-environ
- git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |