[Django] 쟝고 Day 1

빵코·2024년 3월 6일
post-thumbnail

Python Django 란?

  • 특징 및 대표적인 모듈:
    • Django는 python 기반의 웹 프레임워크로, 고수준의 웹 개발을 위한 기능을 포괄적으로 제 공함
    • 대표적인 모듈로는 ORM(객체 관계 매핑), MTV(Model-Template-View) 아키텍처, Django REST framework(RESTful API개발) 등이 있음.
  • 장점:
    • 기본적인 기능들이 이미 내장되어 있어 빠르게 개발을 시작 할 수 있음
    • 강력한 ORM 기능으로 데이터베이스 작업이 편리함

Flask vs Django vs Lambda

Flask

  • 가볍다
  • 하나하나의 블록을 쌓아가는 방법
  • 간단한 Rest API가 필요한 경우
  • flask가 구리다는 것은 아님, 활용방법의 차이
  • 간단한 땅을 파는데 굴삭기 쓸 필요가 없고, 삽을 쓰는것과 같이 flask 도 그럴때 사용

Django

  • 풀 장착

Lambda

  • 서버 환경 구축이 필요 없음
  • 비용이 저렴함

Django 프로젝트 시작 세팅

  1. Poetry 설치 --> 가상 환경을 만들기 위함 --> 프로젝트 1개당 1개의 가상환경
brew install poetry
  1. Poetry 세팅 : Poetry 이용하여 가상환경 설정, 가상환경에 Django 설치
poetry add Django

위 명령어 실행시 pyproject.toml, .venv, poetry.lock 파일 같이 생성됨

1) .venv 디렉토리:

  • .venv는 프로젝트에 대한 가상환경을 나타낸다. 가상환경은 프로젝트의 의존성을 격리하여, 다른 프로젝트나 시스템의 글로벌 Python 환경과의 충돌을 방지함.
  • Poetry는 기본적으로 프로젝트 루트에 .venv 디렉토리를 생성하여 가상환경을 관리함.
  • 이 가상환경 안에서 Python 인터프리터, 라이브러리, 스크립트 등이 프로젝트별로 독립적으로 관리됨.
  • 프로젝트 별 가상환경을 사용하면 의존성 관리가 더 쉬워지고, 프로젝트 간 의존성 충돌의 위험을 줄일 수 있음.

2) Poetry.lock 파일:

  • poetry.lock 파일 프로젝트의 의존성 트리에 대한 정확한 스냅샷을 제공함, 이 파일은 poetry add 명령을 사용하여 의존성을 추가 할 때마다 생성되거나 업데이트 됨.
  • 이 파일은 프로젝트가 사용하는 모든 패키지의 정확한 버전을 기록하며, 프로젝트를 다른 환경에서 재생성할 때 동일한 의존성을 보장함.
  • poetry.lock 파일을 소스 코드 저장소에 포함시켜 다른 개발자나 배포 환경에서도 동일한 의존성을 사용하도록 할 수 있음.
  • 이 파일은 직접 편집하는 것이 아니라, Poetry 명령어를 통해 갑접적으로 관리됨.

==> poetry add Django 명령을 실행하면 Django가 프로젝트 의존성으로 추가되고,
pyproject.toml 파일에 해당 내용이 기록됨, 동시에 poetry.lock 파일이 업데이트되어 Django 및 그 의존성의 정확한 버전 정보가 저장됨. 가상 환경 .venv 내에는 필요한 패키지들이 설치되어 프로젝트와 격리된 환경에서 작동 할 수 있게 됨.

Pyproject 와 poetry의 차이점

  1. pyproject.toml 파일:
  • 이 파일은 프로젝트의 메타데이터와 의존성을 정의함.
  • 프로젝트 이름, 버전, 저자, 의존성 등 프로젝트에 대한 기본 설정과 정보를 포함함.
  • 의존성은 보통 버전 범위로 지정되어, 여러 호환 가능한 버전 중 하나가 선택될 수 있음.
  • pyproject.toml 은 프로젝트의 구성파일로, 프로젝트의 구조와 필요한 의존성을 정의함.
  1. poetry.lock 파일:
  • poetry.lock 파일은 pyproject.toml 에 정의된 의존성의 정확한 버전을 기록함.
  • 프로젝트에서 사용하는 모든 패키지와 그 의존성의 구체적인 버전을 포함하여, 프로젝트를 다른 환경에서 재생성할 때 동일한 의존성을 보장함.
  • 이 파일은 프로젝트의 의존성 트리를 '잠그는(locking)'역할을 하며, 프로젝트의 안정성과 일관성을 유지하는데 중요함.
    (다른 버전이 사용되면 오류가 발생하는데 이것이 생기지 않도록 locking 해주는 역할을 한다)
  • poetry.lock 파일은 자동으로 생성 및 업데이트 되며, 일반적으로 수동으로 편집되지 않음.

==> pyproject.toml 파일은 프로젝트의 구조와 의존성을 정의하는 반면,
poetry.lock 파일은 이러한 의존성의 구체적인 버전을 고정하여 프로젝트의 일관성을 유지하는 데 사용됨. 두 파일 모두 프로젝트의 안정적인 재생성과 의존성 관리에 중요한 역할을 함.

django-admin startproject config . 
# startproject 는 장고프로젝트를 만들겠다, config는 장고프로젝트의 폴더명을 config라고 하겠다, 
.은 내가 현재 있는 루트 폴더에 만들어달라 는 의미.

URL, VIEW 개념

URL Dispatcher (urls.py)

Django의 URL Dispatcher는 Django 웹 프레임워크의 핵심 구성 요소 중 하나로, 웹 요청을 처리하고 해당요청에 맞는 View 함수로 라우팅하는 역할을 함.
즉, 사용자가 웹 브라우저에서 URL을 요청할 때, URL Dispather는 이 URL 을 분석하여 정의된 URL 패턴을 찾고, 해당 패턴에 연결된 View함수를 호출함.

  • Dispatcher: "Dispatcher"라는 용어는 일반적으로 어떤 요청이나 정보를 받아 적절한 목적지 또는 처리절차로 전달하는 역할을 하는 컴포넌트를 지칭하는데 사용

    URL Dispatcher의 작동 방식

  1. URL 패턴 정의: Django 프로젝트의 urls.py 파일에는 URL 패턴이 정의됨. 이 패턴은 특정 URL과 이 URL이 호출 할 View 함수를 매칭함.

  2. URL 매칭: 사용자가 웹사이트에 접근 할 때, URL Dispatcher는 요청된 URL을 urls.py 에 정의된 패턴과 순차적으로 비교함.

  3. View 함수 호출: 일치하는 URL 패턴을 찾으면, URL Dispatcher는 해당 URL 패턴에 연결된 View함수를 호출함. View 함수는 HTTP 요청을 처리하고 응답을 반환함.

  4. 변수 전달: URL 패턴에는 변수를 포함시킬 수 있음. 이 변수들은 동적으로 변경되는 URL 부분을 처리하고, 이 값을 View함수에 인자로 전달할 수 있음.

    URL Dispatcher의 필요성

  • 모듈성과 유지관리: URL Dispatcher를 사용하면 URL과 처리 로직을 분리 할 수 있어, 웹 어플리케이션의 모듈성과 유지관리가 용이해짐.
  • 명확한 URL 설계: URL을 체계적으로 관리 할 수 있어 사용자와 검색 엔진에 친화적인 URL을 만들 수 있음.
  • 안전성: 잘못된 URL 요청을 처리하기 위한 메커니즘을 제공하여, 예상치 못한 오류로부터 애플리케이션을 보호할 수 있음.

기본적인 코드

config/urls.py

from django.contrib import admin
from django.urls import path
from feeds import views

urlpatterns = [
    path("admin/", admin.site.urls),
		path("feeds/", views.show_feed),
		path("feeds/all", views.all_feed),
		path("feeds/<int:feed_id>/<str:feed_content>/", views.one_feed),
]

create feeds app

python manage.py startapp feeds

feeds/views.py

from django.shortcuts import render
from django.http import HttpResponse

def show_feed(request):
	return HttpResponse("show feed")

def one_feed(request, feed_id, feed_content):
	return HttpResponse(f"feed id: {feed_id}, {feed_content}")

def all_feed(request):
	return HttpResponse("all feed")

분리하는 코드

config/urls.py

from django.contrib import admin
from django.urls import path, include
from feeds import views

urlpatterns = [
    path("admin/", admin.site.urls),
    path("feeds/", include("feeds.urls")), # 경로 입력
]

include를 사용해 feeds에 있는 urls파일로 이동, 그 urls 파일에 적어놓으면 됨.

feeds/urls.py (urls.py 파일 생성 필요)

from django.urls import path
from . import views

urlpatterns = [
	path("", views.show_feed)
	paht("<int:feed_id>/<str:feed_content>", views.all_feed,
]

📝한줄끄적
장고는 flask처럼 웹 서버와 연결시켜주는 것인데 기능이 많아 더 무겁고 편리하게 사용 가능하다고 이해했다. 구조에 맞는 url실행시 config의 urls 파일에서 feeds의 view파일을 매칭하여 불러오는 것. feeds에 url 파일 만들어 간단하게 분리도 가능. 장고 이름이 먼가,, 당고🍡 같은느낌~

profile
빵먹으면서 코딩하는 개발자를 꿈꾸는 코린이

0개의 댓글