개발하는 삶
[Django] 장고 설치 및 파일 구조 파악하기 본문
회사에서 파이썬+장고 프로젝트를 맡게 되면서 학습을 시작하게 되었다.
----------------------------
파이썬 가상환경
- 하나의 pc에서 프로젝트 별로 독립된 파이썬 환경을 만든다
- 파이썬에서 외부 패키지를 설치할 때 pip 패키지 매니저를 사용
- npm 같은 패키지 매니저는 프로젝트별 패키지 설치를 지원하지만 pip는 시스템 전역으로만 패키지를 설치 가능
- 따라서 pip 을 이용해서 설치하려면 가상환경이 필요함.
- 파이썬 3.3 부터는 venv 모듈 내장 (바로 가상환경 구성이 가능함)
- python -m venv 가상환경이름
- 파이썬 프로젝트는 여러 앱들로 이루어져 관리되고 있음
- python manage.py startapp 앱이름
- 장고는 admin 페이지를 제공해줌. 따라서 유저가 admin 페이지를 커스텀해서 더 효율적으로 사용하고자 함.
장고
- 파이썬과 같이 사용되는 프레임워크
- 기본적으로 관리자 페이지를 제공함.
- DB 테이블을 웹 페이지 상에서 손쉽게 관리할 수 있도록 도와주는 웹페이지
- MVT 패턴
- 장고는 MVT 패턴을 사용한다
- View = templates : 클라이언트에 전송할 HTML 파일 생성
- Controller = View : db 처리가 필요하면 모델을 통해 처리 후 결과를 반환받음
- 사용자가 url 을 입력시, urls.py에 정해놓은 리스트 중 하나를 골라 templates 의 main.html 파일을 보여줌.
- 특징
- 모델이라는 추상화된 클래스를 사용해서 데이터베이스에 테이블을 정의함
- 보통은 SQL 쿼리문으로 데이터를 처리하는데, 장고는 models.py 같은 모델을 모아놓는 파일을 통해 처리함.
장고 설치하기
- ex) 인스타그램.
- 장고 설치 확인
- pip freeze
- 가상환경에서 장고 시작하기
- pip로 패키지 설치 → 파이썬 설치 폴더 안에 저장됨.
- 설치한 패키지는 모든 파이썬 스크립트에서 사용할 수 있게 됨. ⇒ 여러개 프로젝트끼리 설치한 패키지가 각자 달라서 충돌이 발생할 수 있음.
- 따라서 가상 환경을 만들고, 그 가상 환경에 설치된 패키지를 사용하면 버전 문제가 발생하지 않음.(장고 혹은 파이썬 버전 등) 또한 가상 환경 별로 다른 버전의 파이썬과 라이브러리도 사용 가능.
- 아나콘다, 인터프리터, venv 환경을 이용
- 파이썬 버전 3.4부터 virtualenv 패키지를 별도로 설치하지 않고 사용할 수 있다.
- 가상 환경을 설치하는 것을 건너뛰어도 됨.
- pip 최신버전인지 확인
- python -m pip install --upgrade pip : pip 업그레이드
- pip install --upgrade pip : pip 업그레이드
- 파이썬 3.x 버전 사용시 pip3 ~~명령어 이렇게 작성해야 함.
- pip 를 통한 파이썬 패키지 설치 방법
- pip install 패키지 이름 : 패키지 설치
- pip install 패키지 이름==1.0 : 패키지 1.0버전 설치
- pip uninstall 패키지이름 : 패키지 삭제
- 파이썬 필요 패키지
- pip install django : 장고설치
- pip install mysqlclient : python3 에서 사용가능한 mysqlclient 모듈 설치
- pip install pandas : 자료 구조와 데이터 분석을 위한 파이썬 라이브러리 설치
- pip install numpy : 머신러닝, 데이터 분석을 위해선 Numpy 라이브러리
- pip install python-magic-bin : magic 이라는 프로그램을 쉽게 사용하기 위한 라이브러리
- magic 은 리눅스 환경에서 작동된다. 따라서 윈도우용으로 수정된 magic이 프로그램이 포함된 모듈이 python-magic-bin 이다.
- magic 을 이용해 파이썬 코드로 파일포맷을 쉽게 확인함 (zip, txt 등)
- pip install openpyxl : 파이썬으로 엑셀 파일을 열어보는 패키지
- pip install django-import-export : csv, xlsx 등의 파일을 읽어 db에 저장하거나, db의 내용을 csv, xlsx등의 파일로 저장하는 기능을 제공한다. (엑셀. db 파일 관련)
- pip install requests : HTTP 호출 및 requests 모듈 설치
- pip install pycaret : 머신러닝 workflow 를 자동화하는 기능
- pip install django mysqlclient pandas numpy python-magic-bin openpyxl django-import-export requests pycaret : 일괄 설치법
- pip로 설치한 패키지 확인
- pip list
장고 프로젝트 루트
- 프로젝트 최상위 루트
- .gitignore , README.md , requirements.txt 등 배포에 필요한 파일
- 하위 프로젝트
- apps(폴더), config(폴더), static(폴더), media(폴더), templates(폴더), manage.py
- apps
- views/ forms/ 디렉토리 등
- config : settings 파일
- static : css, js 파일 등
장고 프로젝트 생성 및 실행
- django-admin startproject 프로젝트이름
- django-admin startproject 프로젝트이름 .
- . 은 현재 디렉터리에 폴더를 생성하라는 뜻
- . 없이 생성하면 폴더가 두개가 됨.
- 해당 프로젝트 실행하기
- python manage.py runserver
장고 프로젝트 상세정보
- init.py
- 이 파일이 존재하는 디렉터리가 패키지의 일부임을 알려주는 역할
- 파이썬 3.3 버전부터는 init 파일 없이도 패키지로 인식이 되지만 하위버전 호환을 위해 생성하는 것이 안전함
- 파일이 위치한 경로를 패키지 모듈로 사용함.
- 모듈이란? 함수, 전역변수 등을 모아둔 파일을 말함. 그 파일을 불러와서 쓴다고 보면됨.
- ex ) init.py 안에 from 불러올파일 import 함수명 등을 여러개 사용 후 해당 디렉토리 안에서 함수명을 공통적으로 사용이 가능.
- 모든 파일을 불러올 때
- from 불러올파일 import *
- 불러올파일의 디렉토리의 init.py 에 all = [’변수’] 를 설정하고
- 변수.불러올파일의 함수나 전역변수 이렇게 불러오면 됨.
- 이 파일이 존재하는 디렉터리가 패키지의 일부임을 알려주는 역할
- asgi.py
- 웹서버와 프레임워크(장고)를 비동기로 연결해주는 파이썬의 인터페이스
- 장고는 실행속도에 아쉬움이 있어서 asgi를 이용해 비동기 코드가 지원되면 더 성능이 높아질 수 있음
import os // 내장된 asgi 지원 (파이썬 3.3 이상) from django.core.asgi import get_asgi_application // 장고를 시작시 필요한 환경변수를 lalala.settings 로 세팅한다 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lalala.settings') application = get_asgi_application()
- settings.py
- 장고의 모든 개발환경을 셋팅하는 곳
- DB/templates/app등록/정적파일 설정/지역시간 설정 등
- DEBUG = True (개발시 로그를 남긴다)
- 운영시 False 권장
- DATABASES
- defalut 로 sqlite3 데이터베이스를 사용/지원함
- sqlite3 : 파이썬에 기본적으로 내장되어있는 데이터베이스
- STATIC_URL
- 정적 파일 경로 설정 (CSS, JavaScript, Images)
- urls.py
- views.py 의 함수명을 가져와 해당 함수명의 url이 호출될 경우 함수를 실행시켜주는 곳
- 각 하위 장고프로젝트마다 있는 urls.py
- urlpatterns = [path(’’, views.main, name=’main’)]
- ‘’ 은 주소 입력을 의미. (아무것도 적지 않으면 시작페이지로 설정한다고 보면 됨)
- views.main : 해당 url 에 상응하는 view 지정.
- name=’main’ : path 명 설정.
- 메인 urls.py
- from django.urls import include
- urlpatterns = [path(’폴더명/’, include(’폴더명.urls’)),]
- urls.py 가 포함된 디렉토리를 가져올 때 해당 폴더를 path명으로 해줌
- Views.py
- template_name : 뷰에 클래스변수로 속성을 추가하면, 해당 파일이 실행됨
- 장고에서 자동으로 앱 디렉토리의 templates 디렉토리를 참고해 파일명을 찾아 템플릿으로 사용함.
- 예시) template_name = ‘index.html’
- 예시2) 로그인, 로그아웃 상속
- from django.contrib.auth.views import LogoutView, LoginView
- 두 클래스 상속 후 template_name = ‘파일명’ 작성 시 클래스에 해당하는 내용을 템플릿의 형태로 보냄.
- 만약 form 형태로 되어있다면 form 형태로 데이터가 전달됨.
- 각 하나의 함수가 하나의 view를 정의. 화면이 어떻게 보일지 설정해줌
- 함수 기반의 뷰(FBV 방식)
- 클래스 기반의 뷰(CBV 방식)
- 클래스명.as_view()
- template_name : 뷰에 클래스변수로 속성을 추가하면, 해당 파일이 실행됨
- wsgi.py
- 웹 서버 자체는 정적인 페이지밖에 보여주지 못함. 동적인 페이지는 장고 등 웹 어플리케이션의 도움으로 볼 수 있는 것임.
- 웹 서버와 웹 애플리케이션(장고) 간의 인터페이스 역할을 함 (미들 웨어)
- models.py
- 파이썬은 쿼리를 작성하지않아도 됨(SQL 문 작성 안해도 됨) ⇒ 쿼리셋을 사용하면 됨.
- 데이터베이스 모델을 작성함. 모델 정의.
- models.model 을 상속받는구나~하면 됨.
- class Feed(models.Model):
- content = model.TextField()
- 이런식으로…
- python manage.py makemigrations
- 이 명령어로 마이그레이션으로 자동으로 DB 내 테이블 설계도가 만들어짐(실제 완성되기 전)
- python manage.py migrate
- 마이그레이션으로 등록된 파일들을 실행시킴 → 코드에 있는 객체들이 DB에 테이블로 등록이 됨
- models 에서 테이블 설계하고 DB에 테이블 등록 미리 해놓음 → views 에서 get/post 등으로 쿼리셋 실행 → 쿼리셋 안의 모델은 models 에서 가져옴
- models.model 을 상속받는구나~하면 됨.
- 테이블 컬럼 정의
- 필드 타입에 맞는 각각의 Field 클래스 객체를 생성해 할당
- 필드 옵션
- max_length : 최대 길이
- null : null=True 일 경우 Empty 값을 DB에 null 로 저장
- blank : blank=False 이면, 필드가 Required 필드
- primary_key : 해당 필드가 primary key 임을 표시
- default : 디폴트값
from django.db import models
class yimmodel(models.Model):
// 테이블 컬럼들
name = models.CharField(max_length=20, blank=True, null=True)
...
class Meta:
managed = False
db_table = '테이블명'
verbose_name = '임금님'
requirements.txt
- 패키지 목록이 나열된 파일
- 프로젝트 폴더에 넣고 pip install -r requirements.txt 명령어를 실행해 파이썬 패키지목록을 설치
- 다른 파이썬 프로젝트에 같은 패키지를 설치하고 싶을 때 번거로움을 줄여줌
- pip install -r requirements.txt : 패키지 한번에 설치함
'JavaScript, Vue.js, CSS > Python&Django' 카테고리의 다른 글
[Django] svg 및 함수 (0) | 2023.01.05 |
---|---|
[Django] 장고 태그 및 model.py 관련 (0) | 2023.01.02 |
[Python] 힙, 자료구조 (0) | 2022.06.23 |
[Python] 숫자, 문자 변환 (0) | 2022.06.19 |
[Python] 자료형, 리스트, 튜플 (0) | 2022.06.18 |