[AI Class Day 18,19] Django TIL

[AI Class Day 18,19] Django TIL

Django란?

python 기반의 웹 프레임워크

Flask : 마이크로 웹 프레임워크(최소한의 핵심 기능을 갖춤) 간단한 프로젝트에 적합

Django: 거의 모든 것들이 내장되어 있음, 보다 큰 프로젝트에 적합

Django 시작하기

1. 가상환경 구축

2. 장고 설치

3. Django 프로젝트 생성

django-admin startproject <프로젝트 이름>

이렇게 생성된 webproj 폴더 안에 Django의 기본 py 파일들과 db 등이 미리 생성되어 들어가 있음

1. __init__.py : 파이썬 모듈로써 인식하게 해주는 역할

2. asgi.py, wsgi.py : 서버에서 장고 프로젝트를 가동할 때 다루게 될 부분

3. settings.py : 전반적인 장고 프로젝트의 설정사항 반영

BASE_DIR, SECRET_KEY, DEBUG, ALLOWED_HOSTS, INSTALLED_APPS, MIDDLEWARE

ROOT_URLCONF: 프로젝트 url을 관리할 모듈 지정

TEMPLATES

WSGI_APPLICATION: 파이썬에서 웹서버와 소통하는데 필요한 어플리케이션 담당

DATABASES, AUTH_PASSWORD_VALIDATORS

LANGUAGE_CODE, TIME_ZONE, USE_I18N, USE_L10N, USE_TZ

STATIC_URL

4. url.py : url 관리

Django 프로젝트 안에서의 APP

하나의 프로젝트에 여러 APP을 구성할 수 있음

Django App 시작하기

homepage 앱 시작하기

1. CLI에서 앱 시작하기 명령

django-admin startapp homepage

2. settings.py 파일의 INSTALLED_APPS 리스트에 app 추가

INSATALLED_APPS = [ '''''' 'homepage.apps.HomepageConfig' 추가 '''''' ]

이렇게 만든 homepage 폴더 안에 기본 py 파일들이 생성되어 있음

admin.py : 기본적으로 제공되는 admin page가 있는데, 이 설정을 관리

apps.py : 앱에 대한 설정 관리

model.py : 앱에서 쓰일 스키마를 클래스 형태로 작성

views.py : 앱에서 쓰일 뷰를 관리

3. views.py 파일에 index view 만들기

views.py 파일에 가장 기초적인 "Hello World!" 출력하는 view 만들기

from django.http import HttpResponse def index(request): return HttpResponse("Hello World!")

4. urls.py 에 추가

webproj/urls.py

from django.contrib import admin from django.urls import path, include urlpatterns = [ path('', include('homepage.urls')), # 127.0.0.1 path('admin/', admin.site.urls), # 127.0.0.1/admin ]

homepage/urls.py

from django.urls import path from .views import index app_name = 'homepage' urlpatterns = [ path('', index), # 127.0.0.1 ]

Admin Page 로그인하기

슈퍼유저 계정 생선 전에 auth_user 테이블을 만들어 줘야 함

이 4개 app에 대한 마이그레이션을 진행해서 db에 반영해줘야 함

CLI에서 다음 명령어로 마이그레이션 실행

python manage.py migrate

어드민 페이지에 로그인할 수 있는 슈퍼 유저 생성하기

python manage.py createsuperuser

user_name/ password 입력

주소/admin 페이지로 접속하여 로그인하면 admin 페이지 확인 가능 -> db 관리 users table 확인 가능

Template으로 보여줄 화면 구성하기

homepage/views.py

아까 처음 앱 만들기에서는

from django.http import HttpResponse def index(request): return HttpResponse("Hello World!")

HttpResponse 를 리턴하여 간단한 Hello World! 만 출력했지만, 보다 긴 html 페이지를 보여주기 위해서

render() 함수를 return한다.

render() 함수의 parameter

request html 파일 이름 template에 전달해줄 변수 (dict 형)

1. homepage 폴더 내에 templates 폴더 만들기

2. templates 폴더 내에 html 파일 만들고, 코드 작성

3. views.py 파일에서 render 함수 리턴할 때 parameter에 template_html 넣기

homapage/templates/index.html 파일 작성

Python django example Title blah blah blah

homepage/views.py 에 함수 추가

def index(request): return render(request, 'index.html', {})

html로 작성한 화면을 webpage에서 볼 수 있다.

render 함수의 context parameter {} 활용

1. 변수에 넣은 값 보여주기 : {{my_number}}

homepage/views.py

def index(request): number = 10 return render(request, 'index.html', {"my_num": number})

homepage/templates/index.html

body tag 안에 원하는 위치에

{{ my_num }}

추가

웹페이지에는 number 변수에 할당된 값 10 이 보이게 됨

2 . 변수에 메서드 적용해서 보여주기 : {{my_name | upper}}

homepage/views.py

def index(request): name = "Michael" return render(request, 'index.html', {"my_name": name})

homepage/templates/index.html

body tag 안에 원하는 위치에

{{ my_name | length }} {{ my_name | upper }}

추가

웹페이지 에는 name 에 할당된 "Michael"의 길이인 7과 대문자로 변환한 MICHAEL 이 보이게 됨

3. {% ...%} 태그 활용하여 for 문 , if 문 적용해서 보여주기

homepage/views.py

def index(request): nums = [1, 2, 3, 4, 5] return render(request, 'index.html', {"my_list": nums})

homepage/templates/index.html

body tag 안에 원하는 위치에

{% for element in my_list %} {% if not element|divisibleby:"2" %} {{ element }} {% endif %} {% endfor %}

웹페이지 상에는 리스트 원소 중에서 2로 나눠지지 않는 1,3,5 만 출력

Django - MTV 구조

Model, Template, View 로 구성

from http://rollingsnowball.tistory.com/133 by ccl(A) rewrite - 2021-05-18 14:26:15