Django 프로젝트를 시작 해 보자.
Django는 하나의 프로젝트 안에 여러 개의 앱으로 구성되어 있다.
이는 코드의 구성과 재사용성을 높이고, 개발 작업을 모듈화 하여 유지보수를 용이하게 하기 위해서다.
Django를 인스톨 한다고 프로젝트와 앱들이 자동으로 생성되지 않는다.
이제 인스톨 이후 어떻게 진행할 지 알아보자.
참고자료
https://dschloe.github.io/python/2023/07/django_todolist_1/
[Django Project ToDoList - 1]
이번에 할 것
- requirements.txt 로 프로젝트 라이브러리 관리하기
- Django 프로젝트와 앱 구성하기
- Django 기본 세팅, runserver 로 세팅 확인하기
시작하기
0. 편한 프롬포트나 프로그램으로 가상환경을 실행하자
- 가상환경(VSCode) : https://kimec995.tistory.com/8
- 가상환경(Pycharm) : https://kimec995.tistory.com/7
1. requirements.txt 로 프로젝트 라이브러리 관리하기
프로젝트를 시작하기 전, 앞으로 사용할 라이브러리들을 효율적으로 관리 할 필요가 있다.
이전 글에서는 gitbash 에서 pip install ~~ 로 때려넣었지만 라이브러리들의 버전까지 기록하고, 추후에도 확인할 수 있도록 관리하자.
1-1. 프로젝트 폴더에 requirements.txt 파일을 생성하자.
이름은 사실 뭐가 되어도 상관은 없지만, 추후 협업 등 파일 공유할 일이 생기기 때문에 공통적으로 사용되는 이름인 requirements.txt로 만들자.
프로젝트 폴더 (venv 파일이)에 위치하는지 확인하자.
ls
원하는 위치에 있다.
이제 requirements.txt 를 만들자.
touch requirements.txt
1-2. requirements.txt 파일에 설치 할 라이브러리들의 이름을 작성한다.
예시로 몇 가지만 작성한 것.
원한다면 당연히 더 추가한다.
1-3. 일괄 설치
컴퓨터 성능, 라이브러리 크기 등에 따라 속도가 다르다.
기본적으로 오래걸린다.
pip install -r requirements.txt
팁이랄 것도 없지만 혹시 몰라 적자면
매번 requirements.txt 를 작성 하는건 귀찮기도 하고, 현재 위치에 있는지 확인도 안되었다면 터미널 창에서 req 까지만 작성하고 `tab` 을 누르자.
자동 완성 된다면 현재 위치에 있다는 뜻이다.
1-4. 기록 하기
pip freeze>requirements.txt
다른 라이브러리까지 자동으로 인스톨 되었고, 버전 기록까지 완료되었다.
2. Django 프로젝트와 앱 구성하기
라이브러리는 설치 했지만, 아직 필요한 프로젝트와 앱이 없다.
다음 코드로 생성하자.
2-1. Django 에서 프로젝트를 실행하는 명령어를 작성한다.
django-admin startproject (프로젝트 이름)
2-2. 프로젝트 생성 확인
2-3. 프로젝트 파일 확인
이제 프로젝트 디렉토리 내로 들어가 manage.py 파일이 있는지 확인한다.
없다면 프로젝트 디렉토리 삭제하고 2-1 부터 시작한다.
cd (프로젝트 이름)
ls
2-4. 어플리케이션(application) 구성하기
python manage.py startapp (어플리케이션 이름)
하나의 프로젝트에는 많은 앱을 둘 수 있다.
2-4를 반복하면서 필요한 앱들을 생성하자.
3. Django 기본 세팅, runserver 로 세팅 확인하기
드디어 프로젝트와 앱을 만들었다.
하지만 만들었다고 지들이 알아서 동작할까? 당연히 아니다.
이제부터 프로젝트와 앱들을 연결해 주자.
3-1. 프로젝트에서 앱을 세팅하자.
프로젝트 디렉토리 - 프로젝트 디렉토리, 앱 디렉토리 중 프로젝트 디렉토리(이미지에선 ToDoList) 내부의 settings.py 파일을 열어본다.
3-2. Installed_apps 를 찾는다.
3-3. 추가한 앱의 이름을 복붙한다.(오타방지)
3-4. 확인하기
ls
manage.py 파일이 있는 위치에서
python manage.py runserver
붉으죽죽하게 겁을 주지만 그냥 DB같은게 연결이 안됐다는 거다.
무시하고 Ctr 을 누른 상태로 마우스 오른클릭
이 화면이 나오면 연결이 된 것이다.
잘 봤으니 터미널로 돌아가 Ctr + c 로 서버 종료한다.
3-5. 프로젝트 디렉토리 내부의 urls 파일을 찾는다.
프로젝트를 생성할 때 같이 생성된 파일이다.
빨간 줄 친 코드를 입력한다.
참고로 path 뒤의 [,] 표시는 필자가 처음 django 할 때 맨날 까먹었어서 애먼곳을 뒤졌던 원인이다.
덕분에 이제는 절대 안잊지만 혹시 몰라 적는다.
path('', include('연결 할 앱의 이름.urls'))
코드 설명
path 뒤 괄호 안쪽
- 첫 번째 인자인 [''] 는 경로(url)를 나타낸다. 두 번째 인자가 연결 될 위치를 말하는데 빈 칸인 이유는 대충 '무엇을 입력해도' 라는 뜻이다. 주로 기본 페이지를 지칭한다. (첫 번째 페이지 아님)
- 두 번째 인자인 [include('연결 할 앱의 이름')] 은 첫 번째 인자에서 지정 한 경로로 '무엇을' 연결할 지 나타낸다. [include] 를 사용 한 이유는 뒤에 연결 될 내용이 '추가된' 앱이기 때문이다.
저장 하고
3-6. 연결 할 앱에 urls.py 를 추가한다.
3-5에서 이 앱으로 이동하라 했으니 django 는 이 앱으로 올 것이다.
그럼 그 다음은?
그 다음 경로를 지정 해 줄 urls.py가 필요 하지만 앱을 처음 시작하면 urls.py 파일이 없다.
생성하자.
연결 할 앱의 디렉토리 위에서 마우스 오른클릭 - 새파일 - 이름 작성(urls.py)
생성 된 모습
3-7. urls.py 내부를 작성한다.
3-5에서 프로젝트의 urls.py 에서 페이지를 시작하면 이쪽으로 오라 지정했다.
Django는 MTV(Model Template Views) 패턴을 지닌다.
나중에 링크 추가 할 예정이지만 일단 여기서 말 한 이유는
저 패턴 덕분에 urls.py 내부에서는 페이지에 보여 줄 함수를 작성 할 수가 없다는 뜻이다.
이 말은 클라이언트 요청이 들어오면
Project(urls) -> App(urls) -> App(views)
구조를 가져야 한다는 뜻으로, 현재 App(urls) 에서는 다시 App(views) 로 가는 경로를 지정 해 줘야 한다는 뜻이다.
from django.urls import path
from . import views
urlpatterns = [
path('', views.index)
]
코드 설명
- from . import views
- 같은 디렉토리(현재 App)에 위치한 view 파일을 불러오라는 얘기다.
- path('', views.index)
- 3-5와 같다. 여기 urls 로 오면 지정 되지 않은 url 들은 모두 views 파일에 있는 index 함수로 처리 하라는 얘기다.
3-8. 같은 앱의 views.py 파일을 찾는다.
앱 생성 시 같이 만들어 진다.
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello World~")
위와 같이 작성한다.
코드 설명
함수 index 가 호출되면(request) 응답(HttpResponse) 한다.
3-9 실행. python manage.py runserver
3-4 와 같이 실행한다.
위와 같이 출력되는 모습을 볼 수 있다.
하지만 우리가 알고있는 예쁘장한 웹페이지와는 다르게 글자만 덜렁 있으니 허전하다.
이 다음포스트에서 웹페이지의 기능을 추가하고 꾸며줄 예정이다.
번외) 추가사항
호환을 위해 utf-8 작성 할 것을 명령
urls.py 에 작성한다.
번외2) 오류의 경우
- 가상환경 접속을 안 한 경우
-> 터미널 - which python - (venv) 확인. 없으면 접속 - manage.py 파일이 없는 위치에서 실행 한 경우
-> 터미널 - ls - 파일 여부 확인 후 이동 - 함수, 변수 명 오타
-> 이건 안틀리게 쓰는 수밖에 없다.. - 선언 안함
-> 관성적으로 선언 안하는 경우 있음. 선언 잘하자
'django' 카테고리의 다른 글
django Basic Prac02_03 Read + Delete (0) | 2023.08.13 |
---|---|
django Basic Prac02_02 Db + Create (1) | 2023.08.09 |
django Basic Prac01_03 CRUD (0) | 2023.08.03 |
django Basic Prac01_02 CRUD (0) | 2023.07.26 |