가상환경이란?
python 애플리케이션과 그에 따른 패키지들을 격리하여 관리할 수 있는 독립적인 실행 환경
- 가상환경을 사용하는 이유는?
1. 의존성관리
- 라이브러리 및 패키지를 각 프로젝트마다 독립적으로 사용 하기 위해
2. 팀 프로젝트 협업
- 모든 팀원이 동일한 환경과 의존성 위에서 작업하여 버전간 충돌을 방지하기 위해
주의사항 및 권장 사항
- 가상 환경에 "들어가고 나오는" 것이 아니라 Python 환경을 "On/Off" 로 전환하는 개념
- 강상 환경 활성화는 현재 터미널 환경에만 영향을 미친다
- 새 터미널 창을 열면 다시 활성화해야 함
- 가상환경은 "방"이 아니라 "도구 세트"
- 활성화는 특정 도구 세트를 선택하는 것
- 프로젝트 마다 별도의 가상환경을 사용
- 일반적으로 가상환경 폴더 venv는 관련된 프로젝트와 동일한 경로에 위치
- 가상환경 폴더 venv는 gitignore에 작성되어 원격 저장소에 공유되지 않음
- 저장소 크기를 줄여 효율적인 협업과 배포를 가능하게 하기 위함(requirements.txt를 공유)
개발 환경에서는 각각의 프로젝트가 사용하는 패키지와 그 버전을 정확히 관리하는 것이 중요하다!!
1. 가상환경 생성
venv라는 이름의 가상환경을 생성!!
다른 이름으로도 생성 가능하나 관례적으로 venv 이름을 사용한다.
$ python -m venv venv
2. 가상환경 활성화
활성화 명령어는 OS에 따라 다르다.
- macOS/Linux: $ source venv/bin/activate
$ source venv/Scripts/activate
python 3.10 이상은 Django 5 버전이 설치된다.
2.1 가상환경 비활성화
$ deactivate
3. Django 설치
$ python -m pip install Django
python 3.10 이상은 Django 5 버전이 설치된다.
4. 패키지 목록 파일 생성(패키지 설치시마다 진행)
주요특징
- 가상 환경의 패키지 목록을 쉽게 공유 가능
- 프로젝트의 의존성을 명확히 문서화
- 동일한 개발 환경을 다른 시스템에서 재현가능
사용시 주의사항
- 활성화된 가상환경에서 실행해야 정확한 패키지 목록 생성
- 시스템 전역 패키지와 구분 필요
$ pip freeze > requirments.txt
- 현재 python 환경에 설치된 모든 패키지와 그 버전을 택스트 파일로 저장
- requirements.txt: 생성될 파일 이름(관례적으로 사용)
- 환경에 설치된 패키지 목록 확인 명령어: $ pip list
패키지 목록을 기반으로 설치
- 생성된 requirments.txt로 다른 환경에서 동일한 환경 구성
- 가상환경 활성화 후 requirments.txt에 작성된 목록기반으로 설치
$ pip install -r requirments.txt
의존성 패키지
특정 패키지를 실행하기 위해서 특정 라이브러리나 다른 패키지가 필요한 것
- requests 설치 후 설치되는 패키지 목록이 변화하는 것을 볼 수 있다. (단순히 1개가 아닌 여러 개 설치됨)
- 의존성 패키지는 한 소프트웨어 패키지가 다른 패키지의 기능이나 코드를 사용하기 때문에 그 패키지가 존재해야만 제대로 작동한다.
- 사용하려는 패키지가 설치되지 않았거나, 호환되는 버전이 아니면 오류가 발생하거나 예상치 못한 동작을 보일 수 있다.
5. .gitignore 파일 생성 (첫 add 전)
$ touch .gitignore
ignore 할 파일들은 .gitignore.io에서 만들면 편하다.
무시할 파일들 검색해서 넣고 생성 누르면 만들어 준다.
https://www.toptal.com/developers/gitignore
6. git 저장소 생성(git init)
add 한 순간 추적 시작이기 때문에 무조건 add 전에 .gitignore에 넣어야 한다.
7. Django 프로젝트 생성
7.1 프로젝트 생성
Django project : 애플리케이션의 집합
- DB 설정, URL 연결, 전체 앱 설정 등을 처리
$ django-admin startproject library_managemnet .
library_managemnet 라는 이름의 프로젝트 생성
프로젝트 명 뒤에 .이 없으면 프로젝트폴더 안에 프로젝트 폴더가 더 생기면서 프로젝트가 생성된다. 주의하자
7.2 서버실행
$ python manage.py runserver
manage.py와 동일한 경로에서 진
7.3 앱 생성 및 등록
Django application
- 독립적으로 작동하는 기능 단위 모듈
- 각자 특정한 기능을 담당하며 다른 앱들과 함께 하나의 프로젝트를 구성
앱의 이름은 복수형으로 지정하는 것을 권장한다.
$ python manage.py startapp libraries
프록젝트 폴더에 settings.py에 앱을 등록
반드시 앱을 생성한 후에 등록해야 한다.
프로젝트 구조
settings.py
- 프로젝트의 모든 설정을 관리
urls.py
- 요청 들어오는 URL에 따라 이에 해당하는 적절한 views를 연결
__init__.py
- 해당 폴더를 패키지로 인식하도록 설정하는 파일
asgi.py
- 비동기식 웹 서버와의 연결 관련 설정
wsgi.py
- 웹 서버와의 연결 관리 설정
manage.py
- Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인 유틸리티
앱 구조
admin.py
- 관리자용 페이지 설정
models.py
- DB와 관련된 Model을 정의
- MTV 패턴의 M
views.py
- HTTP 요청을 처리하고 해당 요청에 대한 응답을 반환( url, model, template과 연결)
- MTV 패턴의 V
apps.py
- 앱의 정보가 작성된 곳
tests.py
- 프로젝트 테스트 코드를 작성하는 곳
- models.py, forms.py 개발자가 직접 만들어서 사용(기본 제공 X) 이후 포스팅 참고
Django에서의 요청과 응답
1. URLs
http//:127.0.0.1:8000/index/로 요청이 왔을 때,
request 객체를 views 모듈의 index view 함수에게 전달하며 호출
2. View
view 함수가 정의 되는 곳
특정 경로에 있는 template 과 request 객체를 결합해 응답 객체를 반환
- 모든 view 함수는 첫번 째 인자로 요청 객체를 필수적으로 받는다.
- 매개변수 이름이 request가 아니라도 되지만 바꾸지 않는다
3. Template
1. articles(현재 앱 이름을 articles라고 했음) 앱 폴더 안에 templaes 폴더 생성
2. templates 폴더 안에 articles(앱이름과 동일한 이름) 폴더 생성
3. articles 폴더 안에 템플릿 생성
Django에서 template을 인식하는 경로 규칙
장고에서는
app 폴더 / tempates / articles / index.html
app 폴더 / tempates / index.html
빨간 지점 까지는 기본 경로로 인식하고 있어 view 함수에서 template경로 작성시 빨건 경로 이후 지점 경로를 작성해야 한다.
참고
render 함수
주어진 템플릿을 주어진 컨텍스트 데이터와 결합하고 렌터링 된 텍스트와 함께 HttpResponse 응답 객체를 반환하는 함수
render(request, template_name, context)
- request
- 응답을 생성하는데 사용되는 요청 객체
- template_name
- 템플릿 이름의 경로
- context
- 템플릿에서 사용할 데이터 (딕셔너리 타입으로 작성)
LTS (Long-Term Support)
- 프레임 워크나 라이브러리 등의 소프트웨어에서 장기간 지원된느 안정적인 버전을 의미할 때 사용
- 기업이나 대규모 프로젝트에서는 소프트웨어 업그레이드에 많은 비용과 시간이 필요하기 때문에 안정적이고 장기간 지원되는 버전이 필요
MTV 디자인 패턴 정리
- Model
- 데이터와 관련된 로직을 관리
- 응용프로그램의 데이터 구조를 정의하고 데이터베이스의 기록을 관리
- Template
- 레이아웃과 화면을 처리
- 화면 상의 사용자 인터페이스 구조와 레이아웃을 정의
- View
- Model & Template과 관련된 로직을 처리해서 응답을 반환
- 클라이언트의 요청에 대한 처리를 분기하는 역할
Trailing Comma
- "후행 쉼표"
- 리스트, 딕셔너리, 튜플 등의 자료구조에서 마지막 요소 뒤에 쉼표를 추가하는 것
- 문법적으로 아무런 영향을 주지 않는다.
- 일반적으로 선택 사항(단일 요소 튜플을 만들 때는 예외
사용 이유
- 새로운 요소를 추가하거나 변경할 때 편리
- 값의 목록, 인자, import 항목들이 시간이 지남에 따라 확장될 것으로 예상되는 경우에 주로 사용
- 여러 줄에 걸쳐 작성된 데이터 구조에서 유용하며, 코드의 가독성과 유지보수성을 향상시키는데 도움
- 일반적인 패턴은 각 값(등)을 별도의 줄에 배치하고, 항상 후행 쉼표를 추가한 뒤, 닫는 괄호/대괄호/중괄호 다음 줄에 배치하는 것
- 닫는 구분 기호와 같은 줄에 후행 쉼표를 두는 것은 권장하지 않음
'Django' 카테고리의 다른 글
Django Form [Django] (0) | 2024.09.25 |
---|---|
Django ORM with view [Django] (0) | 2024.09.24 |
Django ORM [Django] (3) | 2024.09.23 |
Django Model 생성하기[Django] (0) | 2024.09.23 |
django 란 무엇인가? [django] (0) | 2024.09.17 |