Python/Jabbok

2021. 03. 09. Pybo 따라하기, DB 설정

씬프 2021. 3. 9. 20:05
반응형

JAVA 기초를 끝내고 Spring을 공부하기 전에
빌드 툴인 MVN과 Gradle에 대해서 공부하기로 했다.
그리고 개발을 계속하기 위해서 python django를 통해
아는 형이 부탁했던 웹툰, 웹소설 올리는 사이트를 구성해보기로 했다.

django 시작

1. create project

공식 문서에서 django를 pip로 설치한 후
"django-admin startproject mysite"
라는 명령어로 프로젝트 생성했지만, django-admin을 찾을 수 없다고 나옴.

그래서 "python3 -m django startproject mysite" 명령어를 통해
프로젝트 생성함.

# terminal에서 쉽게 디렉터리 하위 구조를 보기 위해 tree를 사용하는 것이 좋음.
"sudo apt-get install tree"

 

2. 서버 실행

"python3 manage.py runserver" 기본으로 8000번 포트에서 실행됨.

 

3. 앱 생성

프로젝트 안에는 앱이 포함된다. 앱은 무언가 동작하는 웹 애플리케이션을 의미.

프로젝트는 앱들과 설정의 모음.

"python3 manage.py startapp polls" 를 통해 polls라는 app을 생성.

 

4. url 적용

먼저 polls app에서 views.py에 index 함수를 정의해 HttpResponse를 통해

해당 함수가 호출될 때 리턴 값을 설정한다.

polls app에 urls.py를 생성하고 urls에 path 함수를 사용해 view를 참조하여

urlpatterns라는 리스트에 "path('', view.index, name='index')" 라는 값을 넣는다.

path()에 전달되는 파라미터는 route, view, name에 대한 정보.

 

DB에 적용

 

1. DB setup

mysite/settings.py에서 설정이 가능하다. 기본으로 SQLite를 사용한다.

settings.py의 DB 관련 설정에서 'USER', 'PASSWORD', 'HOST', 'PORT' 설정을 추가한다.

"python3 manage.py migrate" 명령어를 통해 설정 값을 적용한다.

 

2. 모델 생성하기

polls/models.py에 models.Model을 상속하는 class를 생성. class가 table 역할,

그 안에 table을 구성할 Field를 특성에 따라 선언한다.

 

3. 모델 활성화

polls app을 mysite/settings.py에서 INSTALLED_APPS에 추가한다.

"polls.apps.PollsConfig'를 추가함.

"python3 manage.py makemigrations polls" 명령어를 통해 DB 모델 정보를 추가할 수 있는 스키마?를 저장한다. 내용을 읽어보면 model들을 DB에 추가하는 SQL문을 확인할 수 있음.

("python3 manage.py sqlmigrate polls 0001")

이후 "python3 manage.py migrate"를 통해 적용한다.

 

4. DB API 활용

"q = Question(question_text=" ", pub_date=timezone.now())" 와 같이 변수에 클래스 객체를 선언하고

q.save()를 하면 DB에 저장할 수 있음.

Question에 저장된 값을 보고자 하면 "Question.objects.all()" 명령어 사용하는데,

이 때, <Question: Question object (1)>과 같이 내용 설명이 부족함.

이에, models에 선언된 클래스에 __str__() 함수를 추가해 return 값에 대표성 있는 field를 선언해주면

호출 시에 <Question: "What's up?">과 같이 선언된 field의 값이 출력됨.

여기에 대해서 자세히 알기 위해서는 ORM에 대한 이해가 필요함!

 

5. admin 계정 생성

"python3 manage.py createsuperuser"를 통해 생성 가능