Networks/Django

SK networks AI Camp - Django 설치

코딩하는 Español되기 2024. 8. 5. 18:30

Django 설치

파일 경로 : dev/Django/Django_create

○ 3.12 가상환경 생성가상환경에서 django 설치

py -3.12 -m venv .venv
.\.venv\Scripts\activate
python -m pip install --upgrade pip
pip install django
python -m djnago --version

프로젝트 생성

아래 코드를 통해 장고 기본 프로젝트 생성 가능

django-admin startproject config .

* config 안에는 django 설정 파일이 들어있음

Application 생성

○ 장고에서 App은 시스템 및 DB를 통해 서비스를 제공하는 Web Application

APP : model, template, view 포함, 여러 앱이 프로젝트를 구성

프로젝트를 python의 class로 생각하면 App은 function(함수)로 볼 수 있음

○ APP은 재사용성 유/무로 앱 개수 결정 If 재사용성 없음 then 하나의 앱으로 사용

○ APP 생성

 

* 현재 폴더 안에 manage.py가 있어야함. (즉, 현재 폴더에 들어가 있어야 함)

python manage.py startapp [앱이름]

 

위와 같이 todolist 앱을 한개 더 생성

python manage.py startapp todolist

 

애플리케이션 등록

○ setting.py로 이동해 INSTALLED_APPS에 생성한 앱 이름(폴더이름 : todolist, user) 추가

# Application definition

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "todolist",
    "user"
]

templates 설정

temlates 폴더 생성 후 해당 폴더 안에 각각의 앱 폴더와 전용 html을 생성

앱마다 하나씩 있어야함(templates/todolist 와 templates/user) + 앱 이름과 동일해야함

settings.py 에서 설정 해주기

config/settings.py 에서 TEMPLATES에 DIRS 부분을 templates(만든 폴더)를 추가

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": ["templates"],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

각 폴더의 파일(todolist/todolist.html & user/user.html) 연결

각 폴더의 views.py에 아래 코드를 복붙

todolist/views.py & user/views.py

from django.shortcuts import render

# Create your views here.

# urls.py(Controller) -> 처리하는 함수
# -> 화면(Template) & 데이터/DB(Model)을 가져오는 역할

def index(request):

    return render(request, "todolist/todolist.html")

각 폴더에 urls.py 추가 및 config/urls.py 수정

○ todolist와 user 폴더에 urls.py를 각각 추가해주기

○ config/urls.py에 import 항목으로 include 추가

from django.urls import path, include

○ urlpatterns를 수정해주기

urlpatterns = [
    # localhost가 들어왔을 때 해당 path가 ??/????/???? 형태면 todolist의 urls로 보내줌
    # 아래의 적힌 형식의 url 외에는 todolist라는 앱이 처리
    path('', include('todolist.urls')),
    # localhost가 ??/user/????/??? 면 아래 코드 실행
    path('user/', include('user.urls'))
]

 

각 폴더의 urls.py에서 request와 views.py를 연결해주기

[todolist/urls.py]

from django.urls import path
from .views import index

# app.urls.py -> request랑 view를 연결해주는 역할
urlpatterns = [
    # 경로가 localhost이면(뒤에 아무것도 안 쓰면) index 함수 실행
    # index 함수 : todolist/todolist 화면으로 실행
    path('', index, name="todolist-index")
]

[user/urls.py]

from django.urls import path
from .views import index

urlpatterns = [
    # localhost : ??/user/ + '' 이면 index 함수 실행(user/views.py안에 함수)
    path('',index, name='user-index')
]

 

 

Django Server 열기

* server 전에 발생한 에러

아래의 코드를 통해 해결

python manage.py makemigrations
python manage.py migrate

 

  * 아래 사진의 PATH를 보면 아무것도 없으니까 todolist로 이동함

python manage.py runserver

 

[문제]

○ localhost:8000/ -> todolist
○ localhost:8000/list -> todolist
○ localhost:8000/user/join -> user
○ localhost:8000/user/login -> user 로 연결되게 하기

더보기

○ templates/todolist/list.html , templates/user/join.html, templates/user/login.html 추가

각 파일에 접속했음을 알려주는 코드로 작성

list.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>list.html 입니다.</h1>
</body>
</html>

join.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1> join.html 입니다.</h1>
</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>login.html 입니다.</h1>
</body>
</html>

 

○ 각 App의 urls.py에 경로 추가해주기

 

todolist/urls.py

from django.urls import path
from .views import index, list

# app.urls.py -> request랑 view를 연결해주는 역할
urlpatterns = [
    # 경로가 localhost이면(뒤에 아무것도 안 쓰면) index 함수 실행
    # index 함수 : todolist/todolist 화면으로 실행
    path("", index, name="todolist-index"),
    path("list/", list, name="todolist-list")
]

user/urls.py

from django.urls import path
from .views import index, join, login

urlpatterns = [
    path("",index, name="user-index"),
    path("join/",join, name="user-join"),
    path("login/",login, name="user-login")
]

 

 

○ 각 App의 views.py 수정

todolist/views.py

from django.shortcuts import render

# Create your views here.

# urls.py(Controller) -> 처리하는 함수
# -> 화면(Template) & 데이터/DB(Model)을 가져오는 역할

def index(request):
    return render(request, "todolist/index.html")

def list(request):
    return render(request, "todolist/list.html")

user/views.py

from django.shortcuts import render

# Create your views here.

# urls.py(Controller) -> 처리하는 함수
# -> 화면(Template) & 데이터/DB(Model)을 가져오는 역할

def index(request):
    return render(request, "user/index.html")

def join(request):
    return render(request, "user/join.html")

def login(request):
    return render(request, "user/login.html")

Migration(마이그레이션)

○ DB의 스키마를 관리하기 위한 방법

○ DB에서는 스키마, 테이블, 필드 등의 변경 발생 시 지정된 DB에 적용하는 과정

DB를 생성하고 모델 생성/변경/삭제 등에 따라 작업 내역 관리 + DB 최신화 가능

python manage.py makemigrations
python manage.py migrate

 

Mysql DB 연결

○ mysqlclient 설치

pip install mysqlclient

○ settings.py 수정

# MySQL: https://velog.io/@devmin/Django-MySQL-Connect
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "django_db", # 데이터베이스 이름
        "USER": "django_root", # mysql 아이디
        "PASSWORD": "django_root1!", # mysql 비번
        "HOST": "localhost", # host 주소
        "PORT": "3306" # 포트
    }
}

 

Django CORS 설치

python -m pip install --upgrade pip
pip install django-cors-headers

 

Django Rest Framework(DRF)

REST API를 위한 프레임워크

○ Django Rest Framework 설치

python -m pip install --upgrade pip
pip install djangorestframework

 

 

(기타 내용)

프로젝트 설정

○ setting.py : 장고의 환경설정 관리

   * setting.py 파일 설정이 올바르지 않거나, 필요 구성 누락 시 정상 실행 안됨

○ 환경설정에서 DB, 디버그 모드, 허용 가능 호스트, Application 다국어 및 지역시간 설정