개발하는 삶

[Django] 장고 설치 및 파일 구조 파악하기 본문

JavaScript, Vue.js, CSS/Python&Django

[Django] 장고 설치 및 파일 구조 파악하기

삶_ 2022. 12. 28. 21:53

 

 

회사에서 파이썬+장고 프로젝트를 맡게 되면서 학습을 시작하게 되었다.

----------------------------

 

 

파이썬 가상환경

  • 하나의 pc에서 프로젝트 별로 독립된 파이썬 환경을 만든다
  • 파이썬에서 외부 패키지를 설치할 때 pip 패키지 매니저를 사용
    • npm 같은 패키지 매니저는 프로젝트별 패키지 설치를 지원하지만 pip는 시스템 전역으로만 패키지를 설치 가능
    • 따라서 pip 을 이용해서 설치하려면 가상환경이 필요함.
  • 파이썬 3.3 부터는 venv 모듈 내장 (바로 가상환경 구성이 가능함)
    • python -m venv 가상환경이름
  • 파이썬 프로젝트는 여러 앱들로 이루어져 관리되고 있음
  • 장고는 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 프로젝트이름 .
    • . 은 현재 디렉터리에 폴더를 생성하라는 뜻
    • . 없이 생성하면 폴더가 두개가 됨.
  • 해당 프로젝트 실행하기

 

 

장고 프로젝트 상세정보

  • init.py
    • 이 파일이 존재하는 디렉터리가 패키지의 일부임을 알려주는 역할
      • 파이썬 3.3 버전부터는 init 파일 없이도 패키지로 인식이 되지만 하위버전 호환을 위해 생성하는 것이 안전함
    • 파일이 위치한 경로를 패키지 모듈로 사용함.
      • 모듈이란? 함수, 전역변수 등을 모아둔 파일을 말함. 그 파일을 불러와서 쓴다고 보면됨.
      • ex ) init.py 안에 from 불러올파일 import 함수명 등을 여러개 사용 후 해당 디렉토리 안에서 함수명을 공통적으로 사용이 가능.
      • 모든 파일을 불러올 때
        • from 불러올파일 import *
        • 불러올파일의 디렉토리의 init.pyall = [’변수’] 를 설정하고
        • 변수.불러올파일의 함수나 전역변수 이렇게 불러오면 됨.
  • 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()
  • 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 에서 가져옴
    • 테이블 컬럼 정의
      • 필드 타입에 맞는 각각의 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 : 패키지 한번에 설치함