Django

Django 프로젝트 생성하기 [Django]

경상도상남자 2024. 9. 18. 01:45

가상환경이란?

python 애플리케이션과 그에 따른 패키지들을 격리하여 관리할 수 있는 독립적인 실행 환경

 

- 가상환경을 사용하는 이유는?

1. 의존성관리

  • 라이브러리 및 패키지를 각 프로젝트마다 독립적으로 사용 하기 위해

2. 팀 프로젝트 협업

  • 모든 팀원이 동일한 환경과 의존성 위에서 작업하여 버전간 충돌을 방지하기 위해

주의사항 및 권장 사항

  1. 가상 환경에 "들어가고 나오는" 것이 아니라 Python 환경을 "On/Off" 로 전환하는 개념
    • 강상 환경 활성화는 현재 터미널 환경에만 영향을 미친다
    • 새 터미널 창을 열면 다시 활성화해야 함
  2. 가상환경은 "방"이 아니라 "도구 세트"
    • 활성화는 특정 도구 세트를 선택하는 것
  3. 프로젝트 마다 별도의 가상환경을 사용
  4. 일반적으로 가상환경 폴더 venv는 관련된 프로젝트와 동일한 경로에 위치
  5. 가상환경 폴더 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. 패키지 목록 파일 생성(패키지 설치시마다 진행)

주요특징 

  1. 가상 환경의 패키지 목록을 쉽게 공유 가능
  2. 프로젝트의 의존성을 명확히 문서화
  3. 동일한 개발 환경을 다른 시스템에서 재현가능

사용시 주의사항

  1. 활성화된 가상환경에서 실행해야 정확한 패키지 목록 생성
  2. 시스템 전역 패키지와 구분 필요
$ 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에서 만들면 편하다.

무시할 파일들 검색해서 넣고 생성 누르면 만들어 준다.

.gitignore.io

 

https://www.toptal.com/developers/gitignore

 

gitignore.io

Create useful .gitignore files for your project

www.toptal.com

 

6. git 저장소 생성(git init)

add 한 순간 추적 시작이기 때문에 무조건 add 전에 .gitignore에 넣어야 한다. 

 

7. Django 프로젝트 생성

7.1 프로젝트 생성

Django project : 애플리케이션의 집합

  • DB 설정, URL 연결, 전체 앱 설정 등을 처리
$ django-admin startproject library_managemnet .

library_managemnet 라는 이름의 프로젝트 생성

프로젝트 명 뒤에 .이 없으면 프로젝트폴더 안에 프로젝트 폴더가 더 생기면서 프로젝트가 생성된다. 주의하자

 

library_management 프로젝트 생성
. 생략 시 생성되는 프로젝트

7.2 서버실행

$ python manage.py runserver

manage.py와 동일한 경로에서 진

 

7.3 앱 생성 및 등록

Django application

  • 독립적으로 작동하는 기능 단위 모듈
  • 각자 특정한 기능을 담당하며 다른 앱들과 함께 하나의 프로젝트를 구성

앱의 이름은 복수형으로 지정하는 것을 권장한다.

$ python manage.py startapp libraries

 

libraries 앱 생성

프록젝트 폴더에 settings.py에 앱을 등록

app 등록

반드시 앱을 생성한 후에 등록해야 한다. 

 

프로젝트 구조

 

settings.py

  • 프로젝트의 모든 설정을 관리

urls.py

  • 요청 들어오는 URL에 따라 이에 해당하는 적절한 views를 연결

__init__.py

  • 해당 폴더를 패키지로 인식하도록 설정하는 파일

asgi.py

  • 비동기식 웹 서버와의 연결 관련 설정

wsgi.py

  • 웹 서버와의 연결 관리 설정

manage.py 

  • Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인 유틸리티

 

 

projcet 생성시 파일 구성

앱 구조

 

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) 이후 포스팅 참고

 

app 폴 구성

 

 

 

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)
  1. request
    • 응답을 생성하는데 사용되는 요청 객체
  2. template_name
    • 템플릿 이름의 경로
  3. 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