[Django] #3 Django 구조(환경 설정, 앱 등록, url-view-templates)
기본 환경 설정
(1) 가상환경 설정
python -m venv venv #(가상환경이름)
(2) 가상환경 활성화
source venv/Scripts/activate
(3) requirement.txt 동기화
pip install -r requirements.txt
(4) django 설치
pip install django==3.2.13
(5) 패키지 목록 생성
pip freeze > requirements.txt
(6) django 확장 프로그램 설치
pip install django-extensions
프로젝트 및 앱 생성
(1) 프로젝트 생성
django-admin startproject project1 .
이 때, project1은 프로젝트의 이름이며, 이름과 온점 사이 온점 끝에 반드시 각각 띄어쓰기를 입력한 후 실행해야 합니다!
* 프로젝트 이름에는 Python이나 Django에서 사용 중인 키워드 및 '-'(하이픈) 사용이 불가합니다.
* '.' (dot)을 붙이지 않을 경우 현재 디렉토리에 프로젝트 디렉토리를 새로 생성하게 됩니다.
(2) 앱 생성
python manage.py startapp articles
articels는 앱의 이름이며, 관행적으로 앱 이름은 복수로 작성하고 있습니다.
애플리케이션 등록 및 작성 순서
(1) 애플리케이션 등록
프로젝트에서 앱을 사용하기 위해서 settings.py의 INSTALLD_APPS리스트에 앱 이름을 등록해줍니다.
* INSTALLD_APPS : Django installation에 활성화 된 모든 앱을 지정하는 문자열 목록
앱 이름을 작성한 뒤 콤마를 적는 것을 잊지 않도록 주의해야합니다.
startapp으로 앱을 먼저 생성하고 INSTALLED_APPS에 등록해야합니다.
먼저 리스트에 등록하면 이미 생성된 것으로 파악해 앱이 생성되지 않는 문제가 발생해요.
앱을 등록할 때 지켜야하는 순서입니다.
: Local app / Third party apps / Django apps를 분리하여 적어주어야합니다.
+) ❗생성 이후 콤마 꼭 확인
(2) Templates 사전 설정
Templates이용을 위해 BASE_DIR을 작성해주고 , 뒤에 'templates'를 추가해줍니다.
project의 경로에서 html파일을 불러오기 위한 작업과정입니다.
이 때 BASE_DIR / 'templates'로 작성하면 코드에서 수정한 사항을 웹페이지에서 즉시 확인해볼 수 있습니다.
(3) urls 작성
# urls.py
from django.contrib import admin
from django.urls import path
from articles import views
urlpatterns = [
path('admin/', admin.site.urls),
# 화면 추가 path('경로', 해당 경로를 처리해 줄
# views.py의 함수 이름)
path('index/', viwes/index),
#사용자에게 index.html을 보여주게된다.
]
django에서 작성하는 순서는 urls → views → templates 입니다.
위의 사진과 같이 project urls에서 앱의 urlpattern을 먼저 작성해준 이후, 앱의 url을 작성하면 되는데요.
만약 model을 이용하는 경우, model에서 클래스를 생성해야합니다.
(3 - 1) Model class생성
model에서 클래스를 생성하거나 수정/변경할 때는 모두 migration을 해줘야합니다.
⚠️ 초기 생성 시 migration을 하기 이전, 앱 폴더에 urls.py가 생성되어있는지, urlspatterns = []이 생성되어 있는지 체크합니다.
python manage.py makemigrations
python manage.py migrate
migiration이 완료되면, url- viwe- template 순서로 작성합니다.
(4) app - urls 작성
앱의 urls에서 각 페이지의 urlpattern을 작성합니다.
(5) view작성
#View
from django.shortcuts import render
# Create your views here.
def index(request):
#request : 사용자의 요청 정보가 담겨있다.abs(
# render는 화면을 만들어주는 함수
# 사용자에게 보여줄 화면 html 함수이름
return render(request, 'index.html')
url작성이 완료되면 view에 함수를 작성해줍니다.
이 때 함수는 HTTP 요청을 수신하고 HTTP응답을 반환하는 함수입니다.
Template에게 HTTP 응답 서식을 맡기게 됩니다.
render()는 주어진 템플릿을 주어진 context데이터와 결합하고,
렌더링 된 텍스트와 함께 HttpResponse(응답)객체를 반환하는 함수입니다.
위 그림과 같이 사용되는데요. 아래와 같이 해석해 볼 수 있습니다.
1. request : 응답을 생성하는 데 사용되는 요청 객체
2. template_name : 템플릿의 전체 이름 혹은 템플릿 이름의 경로를 의미합니다.
3. context : 템플릿에서 사용할 데이터 (딕셔너리 타입으로 리턴 상위에 작성합니다. context로 render에서 받아줍니다.)
(6) Templates 작성
# html 불러오기 ( ! + tap 키)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1> 만나서 반갑습니다! </h1>
</body>
</html>
templates은 실제 내용을 보여주는 데 사용되는 파일입니다.
파일의 구조나 레이아웃을 templates에 작성하면 됩니다.
Templates 파일의 기본경로는 app폴더 안의 templates 폴더입니다.
articles/templates/articles
" 데이터의 흐름 순서 "
서버 실행
python manage.py runserver