KT 에이블스쿨 70일차(1)

박기범·2023년 5월 11일
0

에이블스쿨

목록 보기
77/95

오늘은 장고2일차로 템플릿과 데이터베이스 연결에 대해 배웠습니다.



장고의 Static File

이미지 영상을 Dynamic하게 처리하는 것보다 그냥 Static File로 연결만 하면 어떨까 라는 생각을 가지게 되었습니다.
setting.py를 보게 되면 STATIC_URL = "static/"이라고 있습니다.

    STATIC_URL = "static/"
    STATICFILES_DIRS = [
     BASE_DIR / 'static',
    ]

이와 같이 setting.py를 수정해줄 수 있습니다.

아니면 view에서 직접 처리해줄 수 있습니다.

def load_img(req, name):
 img = open(f'./static/images/{name}.jpg', 'rb')
 return FileResponse(img, content_type= 'image/jpeg' )

urlpatterns = [
    path('images/<name>/', load_img),
]

지금 작업은 urls.py에서 진행했지만 이렇게 직접 설정해줄 수 있습니다.

static 파일을 처리하는 방법은 3가지가 있습니다.

  • WSGI 앞단의 web server에게 맡겨서 진행하는 방법이 있습니다.
  • Web Sever을 따로 분리해서 운영하는 방법이 있습니다.
  • 장고에서 static을 연결해서 처이하는 방법도 있습니다.



Template

템플릿은 사용자에게 보여지는 화면을 담당합니다.
템플릿 설정도 마찬가지로 settings.py에서 설정을 진행합니다.그리고 view에서 보여주고 하는 화면을 설정하면 됩니다.
render함수를 통해 template을 진행합니다.



Template의 사용

목적은 python과 html의 분리를 위한 목적으로 사용되었습니다.
template 파일을 가지고 렌더링 합니다.

  • render 함수를 이용합니다.
  • dictionary 형태로 데이터 전달합니다.
  • template에서 for, if 문법을 사용할 수 있습니다.

템플릿에서 사용하는 문법은 파이썬과 같습니다.



Template의 상속

템플릿의 상속을 위해서 extends 와 block을 사용합니다.

    {% extends 'base.html' %}
    {% block title %}
    	Child Page Title
    {% endblock %}
    
    {% block content %}
    	<h1>Welcome to the Child Page</h1>
    {% endblock %}

이런 식으로 사용합니다. 공통적으로 사용되는 레이아웃에 사용됩니다.(header, footer)
상속받은 extends 템플릿에서 block을 사용하여 특정 부분만 변경합니다.

▶ 템플릿 정리

장고에서 Template은 Look(보여지는 화면)을 담당합니다. 간단한 웹 사이트는 View와 Template로 충분합니다. 또한 유지보수를 위해 이렇게 MVT 패턴을 사용하는 것입니다.



Django App

python mange,py startapp myapp
을 터미널에 입력하면 앱이 생성됩니다.

애플리케이션은 하나의 사이트 내에 기능을 개별 애플리케이션으로 분리하여 정의합니다.
추가한 앱은 settings.py의 파일에 INSTALLED_APPS에 추가합니다.

기존에 있는 APPS는 장고에서 제공해주는 애플리케이션입니다. 마지막에 이제 추가로 우리가 만들고자 하는 앱의 이름을 등록합니다.

url관리는 urls.py에서 진행하면 됩니다. 애플리케이션만 만들면 urls.py과 없으므로 꼭 메인 프로젝트를 생성하고 애플리케이션을 만들어야합니다.
하지만 path('blog/', include('blog.urls'))이런식으로 처리하면 blog애플리케이션에 urls.py을 만들어서 관리할 수 있습니다. 즉, blog/ 밑에 있는 url을 blog애플리케이션 안의 urls.py에서 관리할 수 있게 됩니다.(위임개념)



admin 시스템

회원관리 시스템은 거의 모든 사이트에서 필요로 합니다. 기능으로는 관리자 로그인/로그아웃 기능 Database 세팅 및 연결 기능 그룹관리, 화원관리, 검색과 필터링 기능이 필요로 합니다. 여기서 그룹관리 회원관리는 CRUD라고 생각하면 됩니다.

장고는 manage system이 이미 만들어져 있습니다.

admin 계정을 설정하는 방법은 아래와 같습니다.

  • makemigrations: model 구조에 맞게 migrate 코드를 추가한다.
  • migrate: db migration을 진행한다. 스키마 변경을 tracking 한다.
  • createsuperuser: 관리자 계정을 추가한다.
    # DB Migration
    $ python manage.py makemigrations
    $ python manage.py migrate
    # 관리자 계정 추가
    $ python manage.py createsuperuser

위 코드를 실행하면 이제 관리자 이름과 비밀번호를 입력하면 계정이 생성됩니다.



장고와 데이터베이스의 연결

연결 순서는 아래와 같습니다.

    1. mydb 생성
    1. mysqlclient 라이브러리 설치
    1. settings.py의 db 세팅 수정
    1. migrate & createsuperuser
    1. runserver

settings.py의 파일에 아래와 같이 DB설정을 해줍니다.

    DATABASES = {
     'default': {
     'ENGINE': 'django.db.backends.mysql' ,
     'HOST': 'localhost' ,
     'PORT': '3306',
     'NAME': 'aivledb',
     'USER': 'root',
     'PASSWORD': 'aivle1111',
     },
    }

DB설정이 완료가 되었다면 터미널에 아래와 같은 순서로 진행합니다.

    # 라이브러리 설치
    $ pip install mysqlclient
    # db 초기화
    $ python manage.py migrate
    # user 생성
    $ python manage.py createsuperuser
    $ python manage.py runserver



장고의 ORM

ORM이란 Object-Relational-Mapping의 약자로 코드로 데이터베이스 작업을 쉽고 안전하게 수행하도록 돕습니다.

ORM 사용방법

    #모든 사용자 가져오기
    User.objects. all()
    # 이메일 주소로 사용자 필터링하기
    User.objects. filter(email='blackdew7@gmail.com' )
    # 사용자 이름으로 정렬하기
    User.objects.order_by( 'username')

MYSQL 활용방법

    # 모든 사용자 가져오기
    mysql> SELECT * FROM auth_user
    # 이메일 주소로 사용자 필터링하기
    mysql> SELECT * FROM auth_user WHERE email = 
    'blackdew7@gmail.com'
    # 사용자 이름으로 정렬하기
    mysql> SELECT * FROM auth_user ORDER BY username

내일 더 추가적으로 진도 나가고 OMR에 대해서 작성하겠습니다.







오늘은 어제에 이어 장고를 배웠습니다. MVT구조를 왜 지향하는지 그리고 템플릿 설정에 대해서 배웠는데 많이 어려웠던 하루였습니다.




※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.

profile
개발자가 되기 위한 한걸음

0개의 댓글