25/09/30 장고

344th·2025년 12월 11일

AWS AI

목록 보기
18/48

장고의 특징

  1. MVT 모델 사용
    • Model: 데이터베이스에 액세스하는 컴포넌트
    • View: 데이터를 가져오고 변형하는 컴포넌트
    • Template: 데이터를 사용자에게 보여주는 컴포넌트
  2. 객체 관계 매핑
    • 데이터베이스 시스템과 데이터 모델 클래스를 연결시키는 다리 역할
    • ORM을 사용하면 SQL 문장을 사용하지 않고 테이블 조작 가능
  3. 자동으로 구성되는 관리자 화면
    • 데이터베이스에 포함된 모듈을 이용하여 관리자 페이지를 제공
    • 별도로 관리 기능을 구성할 필요가 없음
  4. URL 설계가 강력함
    • URL에 따라 View 컴포넌트 호출 가능
    • 직관적으로 사용 가능
    • URL 뿐만 아니라 별명을 이용하여 View 컴포넌트 호출 가능
  5. 다국어 지원
    • 다양한 언어 지원뿐만 아니라 해당 나라가 가지고 있는 문화도 반영 가능(화폐 단위, …)
  6. 기본 웹 제공
    • Apache 웹 서버를 기본으로 제공
    • Nginx 등의 프록시 엔진을 사용하여 장고로 연결시키는 방식을 권장
  7. 장고는 파이썬 파일 추적
    • 파이썬 파일의 변경이 감지되면 장고가 서버를 재시작
    • 실시간 반영

환경 세팅

가상환경

: window 기반

  • 폴더 구조와 같은 것이 window를 따라감

가상 환경을 생성하여 장고 설치

→ 파이썬 버전 혹은 다른 라이브러리들의 버전이 일치하지 않는 문제가 발생했을 때 다른 부분에 영향을 주지 않고 독립된 그 가상환경만 지우면 됨

cmd 열어서 가상환경 생성

C:\Users\DS 14>mkdir venvs

C:\Users\DS 14>cd venvs

C:\Users\DS 14\venvs>python -m venv mysite

리눅스에서도 activate.bat 을 이용해 실행 가능

생성한 가상환경 활성화/비활성화

C:\Users\DS 14\venvs>cd mysite/Scripts
C:\Users\DS 14\venvs\mysite\Scripts>activate
C:\Users\DS 14\venvs\mysite\Scripts>deactivate
  • activate : 활성화 : activate 파일이 있는 위치에서만 실행 가능
  • deactivate : 비활성화 : 위치 상관없이 실행 가능

활성화된 가상환경 내부에 장고 설치

(mysite) C:\Users\DS 14\venvs\mysite\Scripts>pip install django
...Successfully installed asgiref-3.9.2 django-5.2.6 sqlparse-0.5.3 tzdata-2025.2

장고 프로젝트 생성

홈 디렉토리로 이동

장고 프로젝트를 생성할 디렉토리 생성 (venvs와 동일 위치)

(mysite) C:\Users\DS 14\venvs\mysite\Scripts>cd ..

(mysite) C:\Users\DS 14\venvs\mysite>cd ../..

(mysite) C:\Users\DS 14>mkdir projects

(mysite) C:\Users\DS 14>cd projects

(mysite) C:\Users\DS 14\projects>mkdir mysite

현재 위치에 장고 프로젝트 구성

django-admin startproject config .

(mysite) C:\Users\DS 14\projects\mysite>django-admin startproject config .
projects
	|- mysite
		|- config
		|- manage.py
		...
  • config : 프로젝트의 전체 설정을 관장함

settings.py

...
from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent

# BASE_DIR 확인
print(BASE_DIR)
...

/* 실행 결과 */
C:\Users\DS 14\projects\mysite
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []
  • 개발 단계에서는 DEBUG = True 지만
  • 상용화 단계에서는 DEBUG = False 로 꼭 설정해줘야 함
  • ALLOWED_HOSTS : 허용하는 호스트
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
  • 'django.middleware.csrf.CsrfViewMiddleware' : csrf 방지 *csrf: 사용자가 신뢰하는 웹사이트에서 자신의 의지와는 무관하게 공격자가 의도한 특정 요청을 보내도록 유도하는 웹 보안 취약점

urls.py 에서 모듈을 임포트하는 부분에 뜨는 에러 제거

  • 오류 뜨는 부분에 Ctrl + .
  • 인터프리터 선택
  • "C:\Users\DS 14\venvs\mysite\Scripts\python.exe” 로 인터프리터 변경
    • 장고의 파이썬 인터프리터로 바꿔준 것

**manage.py 를 이용해 서버를 구동**

python manage.py runserver

(mysite) C:\Users\DS 14\projects\mysite>python manage.py runserver

외부 네트워크에 개방해서 서버 구동

python [manage.py](http://manage.py/) runserver 0.0.0.0

→ 그러나 열리지 않음

→ 장고의 영역이 아니기 때문

→ 방화벽 설정을 해줘야 함

방화벽 - 고급 설정 - 인바운드 규칙 추가

내 ip 주소 확인

ipconfig

무선 LAN 어댑터 Wi-Fi:

   연결별 DNS 접미사. . . . :
   링크-로컬 IPv6 주소 . . . . : fe80::6f96:fe21:6ef3:af08%5
   IPv4 주소 . . . . . . . . . : 192.168.3.64
   서브넷 마스크 . . . . . . . : 255.255.252.0
   기본 게이트웨이 . . . . . . : 192.168.0.1

**settings.py 모든 호스트 허용**

ALLOWED_HOSTS = ["*"]

서버 구동

python manage.py runserver 0.0.0.0:8000

결과

activate 환경변수 등록

어느 위치에서든 activate 실행 가능하게 함

리눅스에선 .bashrc → alias 에 activate 등록

activate 를 실행시키는 절대 경로

"C:\Users\DS 14\venvs\mysite\Scripts\activate"

띄어쓰기가 있으므로 따옴표로 묶어줌

이 경로를 환경변수로 등록

"C:\Users\DS 14\venvs\mysite.cmd” 생성 (txt 확장자 붙어있으면 안됨)

# 입력받은 걸 다시 출력하지 말고 그냥 실행시켜라(echo 기능 끄기)
@echo off
# 실행할 프로젝트 디렉토리로 이동
cd "C:\Users\DS 14\projects\mysite"
"C:\Users\DS 14\venvs\mysite\Scripts\activate"

시스템 환경 변수 편집 - 환경 변수 - 사용자 변수 - Path

mysite.cmd.txt 생성한 경로 추가

C:\Users\DS 14\venvs\

cmd 재시작

mysite
(mysite) C:\Users\DS 14\projects\mysite>    

app 생성

가상환경 활성화 후 앱 생성

django-admin startapp pybo

서버 localhost/pybo 로 접속하기 위해 url 세팅

config/urls.py

from pybo import views

urlpatterns = [
    ...
    path('pybo/', views.index),
]

/pybo url 경로는 pybo/views.py 의 index 함수 호출

index 함수는 urls.py 로부터 호출 요청을 받음

그러므로 매개변수에 request 가 들어감

pybo/views.py

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

def index(request):
    return HttpResponse("안녕하세요 pybo에 오신 것을 환영합니다.")

HttpResponse 는 함수

결과

url 분리

config/urls.py

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('pybo/', include("pybo.urls")),
]

pybo/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index),
]

결과

데이터 관리 모델(models.py)

migrate 와 테이블

migrate

python manage.py migrate

https://sqlitebrowser.org/

x64 는 64비트

x86은 32비트

설치

데이터베이스 열기 - 프로젝트 폴더의 sqllite3 선택

데이터베이스 생성(models.py)

pybo/models.py

from django.db import models

# Create your models here.
class Question(models.Model):
    subject = models.CharField(max_length=200)
    content = models.TextField()
    create_date = models.DateTimeField()

class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    content = models.TextField()
    create_date = models.DateTimeField()

config/settings.py

INSTALLED_APPS = [
    'pybo.apps.PyboConfig',
    ...
]

migrate

**python manage.py migrate**        
...
Running migrations:
  No migrations to apply.
  Your models in app(s): 'pybo' have changes that are not yet reflected in a migration, and so won't be applied.
  Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.

makemigrations 로 파일 생성이 먼저

python manage.py makemigrations

다시 migrate

python manage.py migrate 
profile
새싹 개발자

0개의 댓글