(4-3) Django

Yongjoo Lee·2020년 12월 23일
0
post-thumbnail

Django

![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2F8073d9ab-1406-40ad-b312-61f5a8a88dd9%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2F8073d9ab-1406-40ad-b312-61f5a8a88dd9%2Fimage.png)

Python 기반 웹 프레임워크

Flask vs Django

  • Flask - "마이크로" 웹 프레임워크 (최소한의 기능을 갖춤), 간단한 프로젝트에 적합
  • Django - 거의 모든 것들이 내장되어 있음, 큰 프로젝트에 적합

Django 시작

가상환경 구축하기

python -m venv venv

.\venv\Scripts\activate

Django 설치하기

pip install django

Django 프로젝트 생성

django-admin startproject <proejct_name>

django-admin startproject webproj

Django 기본 구성요소

![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2F3a1408b6-8af4-4d82-8aef-adfaa50235b3%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2F3a1408b6-8af4-4d82-8aef-adfaa50235b3%2Fimage.png)

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

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

  • settings.py : 전반적인 django 프로젝트의 설정사항을 반영

    • 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

      👉 이미 많은 기능들이 내장되어 있음

  • urls.py : url 관리

Django 프로젝트에서의 App

한 project는 여러 App으로 구성되어 있다.

Django App 시작

Django App 생성

django-admin startapp homepage

💡 settings.py 파일의 INSTALLED_APPS 리스트에 생성한 app 등록

INSTALLED_APPS = [
    ...

    'homepage.apps.HomepageConfig'  # 추가
]

Django App 기본 구성요소

![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2Fb45d0359-8751-4723-b12b-b55120b984d2%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2Fb45d0359-8751-4723-b12b-b55120b984d2%2Fimage.png)

  • admin.py : 기존적으로 제공되는 admin page 설정 관리
  • apps.py : 앱에 대한 설정 관리
  • model.py : 앱 내에서 쓰일 스키마를 클래스 형태로 작성
  • views.py : 앱 내에서 다룰 뷰 관리

Django의 MTV 패턴

![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2F14766bb5-74a2-49cb-9de2-491fd5e290d7%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2F14766bb5-74a2-49cb-9de2-491fd5e290d7%2Fimage.png)

사진출처: https://unifox.tistory.com/6 [Python Django]

MVC 패턴(Model, View, Controller)과 비슷한 로직

  • Model
  • Template
  • View

index view 작성

  • views.py

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

프로젝트 디렉토리에 urls.py 파일이 있지만
각 앱에 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
    ]
  • hompage/urls.py

    from django.urls import path
    from .views import index
    
    app_name = 'homepage'
    urlpatterns = [
        path('', index),  # 127.0.0.1
    ]
    • app_name은 추후에 template에서 사용하기 위하여 미리 작성해두었다.

admin page 로그인

python manage.py createsuperuser : 슈퍼유저 생성

python manage.py createsuperuser

마이그레이션을 하기전에 슈퍼유저 계정을 생성하려고 하면 다음과 같은 오류가 발생한다.

![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2F7b7e14a2-bdf2-4455-9772-1bbcf36a6e39%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2F7b7e14a2-bdf2-4455-9772-1bbcf36a6e39%2Fimage.png)

auth_user 테이블이 존재하지 않아서 발생한 오류이다.

💡

![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2F62b2de15-e58e-4773-98d8-0a95bc535ced%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2F62b2de15-e58e-4773-98d8-0a95bc535ced%2Fimage.png)

  • django에서는 다음과 같이 admin, auth, contenttypes, sessions app이
    기본적으로 생성되어 있다.
  • 따라서 먼저 위의 4개의 app에 대한 마이그레이션을 진행하여 DB에 반영해주어야 한다.

python manage.py migrate : 마이그레이션 실행

python manage.py migrate

마이그레이션을 실행하고 슈퍼유저를 생성하여 admin 페이지에서 로그인하면 다음과 같은 페이지를 확인할 수 있다.

![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2Fa61ce962-ea2f-4ef2-9192-79c60efc842b%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2Fa61ce962-ea2f-4ef2-9192-79c60efc842b%2Fimage.png)

![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2F16b2455b-e754-4a07-a232-19c49235a6de%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2F16b2455b-e754-4a07-a232-19c49235a6de%2Fimage.png)

  • 테이블 확인 가능 ( Groups 와 Users 라는 기본 테이블 존재 )
  • 데이터베이스 관리 가능 ( CRUD 가능 )

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

지금은 단순한 문자열을 반환하여 확인하기 위해 위와 같이 간단하게 작성하였다.

하지만 단순한 문자열이 아닌 긴 내용의 html 코드를 반환해주려면 어떻게 해야할까?

render() 함수를 이용!

📌 render() 의 파라미터

  1. request
  2. template_name : html 파일 이름
  3. context : template에 전달해줄 변수 (dict 형)

Template 언어

**render()의 context 파라미터를 이용하여 view에서 template으로 값 넘겨주기**

  1. 템플릿 변수 {{ number }}

  2. 템플릿 필터 {{ name | upper }}

  3. 템플릿 태그 {% tag ... %} ~ {% endtag %}

profile
하나씩 정리하는 개발공부로그입니다.

0개의 댓글