교육/프로그래머스 인공지능 데브코스

5주차 - Day1. Web Application with Django

zzangyeah 2021. 5. 18. 23:31
728x90

1.django 시작하기

django : python기반 웹 프레임워크 인스타구뤰도 이걸로 만들었대

*flask와 다른 점?

-flask : "마이크로" 웹 프레임워크 -> 최소한의 기능  =>작은 프로젝트에 적합

-django : 거의 모든 것이 내장되어 있는 구조 =>큰 프로젝트에 적합

가상환경 설치하기

#파이썬 가상환경 모듈 설치 
pip install virtualenv
#현재 디렉토리에 새 virtualenv가상환경 만들기
virtualenv <가상환경 이름>

맥사고십따^^....

내 콤퓨타는 윈도우10인데 관리자로 powershell해도 바로 안돼서 진행한 방법 적어둠

#1.디렉토리 만들고 이동 
mkdir django-proj
cd django-proj

#2.가상환경 만들기
virtualenv venv

#!관리자모드로도 안돼서 아래의 명령 실행하고 Y입력
Set-ExecutionPolicy RemoteSigned

#3.가상환경 실행
venv\Scripts\Activate.ps1

#4.django설치
pip install django

#5.
django-admin startproject webproj
cd webproj
python manage.py runserver
#>>웹사이트주소가 나옴 주소긁어서 들어갔을때 깜찍한 로켓이 떠있다면 성공!

django의 구성요소

1. webproj:

-__init__.py: 'webproj'디렉토리가 파이썬 모듈로써 인식되게 하는 파일

-asgi.py, wsgi.py : 서버에서 실제로 django프로젝트를 가동할 때 다루게 될 파일

-settings.py : 파이썬 django프로젝트의 전반적인 설정사항을 반영하는 파일, 많은 기능들이 이미 내장되어 있는 걸 확인가능

-urls.py : url관련

2. manage.py : django 실행하는 파일

python manage.py runserver를 통해 실행하게 됨

 

 

#settings.py

from pathlib import Path

#django프로젝트에 대한 secret key
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = ''

#True면 파이썬 프로젝트를 디버그모드로 실행
DEBUG = True

#리스트 안에 주소를 넣음으로써 어떤 django프로젝트에 접근할지 결정
ALLOWED_HOSTS = []

# Application definition
#여러 앱으로 이뤄져있는데 어떤 앱을 설치하는지
INSTALLED_APPS = [
]

MIDDLEWARE = [
]

#프로젝트에서 url관리를 어떤 모듈에서 진행할지
ROOT_URLCONF = ''

#실제보는 화면에 관한 요소들이 담겨있음
TEMPLATES = [
    {
        'BACKEND': ,
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
             
            ],
        },
    },
]

#파이썬 상에서 웹서버 상에서 소통하는 어플리케이션을 다룸
WSGI_APPLICATION = ''

# Database
#프로젝트 상에서 다루게 되는 여러 자료들을 저장하는 곳을 담당, mySQL, MariaDB등으로 변경 여기서
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

# Password validation
#관리자부분에서 패스워드 변경
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': '',
    },
    {
        'NAME': '',
    },
    {
        'NAME': '',
    },
    {
        'NAME': '',
    },
]


# Internationalization
LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

# Static files (CSS, JavaScript, Images)
#이후 CSS javascript같은 정적 파일들을 어디에 담아둘지
STATIC_URL = '/static/'

django Project and App

한 project는 여러 app으로 구성

 

django App만들기

(venv)~~~~$django-admin startapp <app_name>
(venv) PS C:~~\django-proj\webproj> django-admin startapp homepage

-__init__.py

-admin.py 파이썬에서는 admin페이지를 제공하는데 admin페이지에 관한 파일

-apps.py app에 대한 설정 파일

-models.py homepage라는 모듈안에서 쓰일 데이터베이스의 스키마등등을 클래스형태로 작성

-tests.py 프로젝트의 테스트케이스

-view.py 홈페이지라는 앱에서 뷰를 어떻게 관리해줄 것인가

 

 

 

 

 

 

 

 

 

django의 MVT Pattern

user<->django<->URL<->View<->MODEL, Temlplate

User가 request를 django에게 보냄

django(서버)가 URL을 인식 어떤 경로에 대한 요청이 들어왔는지 체크, 이 경로가 urls.py에 있다면 view에 보냄

view(views.py)에선 들어온 요청을 처리하는 로직이 있음

DB관련->MODEL(ORM으로 처리)/웹페이지관련->Template(html+template언어)

2. View로 Request Handling하기

수정할 파일들

#views.py
from django.shortcuts import render, HttpResponse

def index(request):
	return HttpResponse("Hello World!")

 

#urls.py
from homepage.views import index

urlpatterns=[
	path('',index),
]
#settings.py
INSTALLED_APPS=[
	'homepage',
]

과정

1.사용자가 127.0.0.1로 요청을 보냄

2.urls.py에서 주어진 경로가 들어있는지 확인

3.django에서 인식하고 index()를 실행하기 위해 views.py로 이동

4.views.py에 있는 index()를 실행하여 사용자에게 response

 

http://127.0.0.1:8000/admin/ 접속하는 방법

처음엔 계정을 만들지 않았기 때문에 계정을 만들고 접속해야함

 #django를 만들때 admin이라는 db가 자동으로 생성, 마이그레이션해줘야함
 #어떤 DB가 생성, 수정, 삭제되는 과정을 git commit하듯이 직접적으로 django에게 알려줘야함
 #default로 만들어진 DB정보가 반영,실질적으로 django proj에 DB가 연동
 python manage.py migrate
 python manage.py createsuperuser
 python manage.py runserver

3. Template로 보여줄 화면 구성하기

render(request, '.html', {})
#1.request로 받은 인자
#2.응답하는 과정에서 보여줄 파일
#3.request와 html파일 사이에서 사용할 인자

template 폴더, index.html파일 추가

<!DOCTYPE html>
<html>
    <head>
        <title>Python django example</title>
    </head>

    <body>
        <h1>Title</h1>
        <p>blah blah blah</p>
    </body>
</html>
#settings.py
TEMPLATES = [
    {
        'BACKEND': '',
        'DIRS': [
        	#아래 두개 중 하나 추가
            #os.path.join(BASE_DIR,"homepage","template"),
            #BASE_DIR+'homepage/template/index.html'
            ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
            ],
        },
    },
]

템플릿 필터 : 변수의 값을 특정 형식으로 변환할때 사용 ex)값의 길이, 특정 값만 원할 때 사용

{{템플릿 변수 | 템플릿 필터}}

템플릿 태그 : html자체에는 프로그래밍적인 요소를 사용할 수 없음 django에서 할 수 있는 방법

{%tag ... %}
{%endtag ...%}

Day 3 - Django로 자기소개 페이지 만들기

필수 과제 : 아이엠 그라운드 자기소개 하기

  • 다음 요청을 처리하는 웹 어플리케이션을 제작해주세요.
  • GET /  자기소개 웹 페이지를 Response
    • 이 페이지는 HTML을 이용해서 여러분이 원하는 내용을 작성해주세요.

보너스 과제 : ⭐️아이😊엠 그라운드⛳️ 자기💁‍♀️소개💁‍♂️ 하기⭐️

  • CSS JavaScript 등을 이용해 자신의 웹 페이지를 더욱 멋있게 만들 수 있습니다. HTML으로만 된 밋밋한 자기소개 페이지를 꾸며봅시다.
  • 이들을 사용하기 위해선 이 파일들이 담긴 경로를 STATIC_URL을 이용해 지정해주어야합니다.