본문 바로가기
패스트캠퍼스

[패스트캠퍼스] 파이썬 강의 6주차 / Django, CSS, 템플릿 태그, 장고 배포, gunicorn

by 리잼 2022. 10. 3.
반응형

Django ORM

ORM 이란?

Object Relational Mapping, 객체 관계 매핑

  • 파이썬 객체와 RDBMS 연결
  • SQL 쿼리를 자동으로 생성
  • DB 데이터 <- 매핑 -> 파이썬 객체
  • 객체를 통해 간접적으로 데이터베이스 데이터 핸들링
  • Django ORM, SQLAIchemy, Pony
장점 단점
직관적
가독성이 올라감
코드 재사용 및 유지보수 수월
DBMS 종속성이 줄어든다
SQL Injection을 막아준다
Raw 쿼리가 반드시 필요한 구간이 반드시 있다
프로젝트의 복잡도가 올라가면, ORM난이도도 올라감
프로시저 사용이 수월하지 않다

Django admin

장고는 다른 프레임워크와는 다르게  admin 기능을 지원한다

admin에선 계정을 생성, 데이터 추가와 같은 일들이 가능하다

위와같이 프로젝트 파일의 admin.py에 PayPlan을 넣어주면 장고 admin 사이트에서도 연동이 바로바로 되는 것을 볼 수 있다

Payplan에 데이터를 넣으면

payplan 테이블

DB에서도 바로 확인이 가능하고

user 테이블

DB 유저 테이블 pay_paln_id에 값을 넣어주고

models.py에 pay_plan정보를 출력하는 명령어를 넣어주면

이렇게 CMD 창에서도 확인이 가능하다

 

Django 회원가입

Django Froms

  • 단순 정보 전달성 홈페이지를 만드는것이 아니라면, 유저의 입력을 받아야한다 이것을 Form 이라고 한다

from 생성 >> 템플릿으로 전달 >> 템플릿 렌더링

 

models.py

full_name 추가 후 꼭 makemigraions >> migrate 를 해줘야 DB에 반영이된다

views.py

view 파일에 register 함수 추가작성

form.py

회원가입 form 작성

register.html
회원가입 form
회원가입 후 자동 로그인이 된다
DB테이블

로그인, 로그아웃

urls.py
views.py import
views.py login_view, logout_view 추가

로그인 함수 이름이 login_view인 이유는 이미 장고에서 지원하는 login과 겹칠 수 있기때문에 이름을 다르게 설정해야한다고 한다

login.html
로그인 화면 세션이 생성됨
로그아웃을 하면 세션이 사라짐

csrftoken으로 위변조를 방지할 수 있다.

 

Django 게시판

더미 데이터를 만들기 위해 django_seed 를 설치해준다

requirements.txt

requirements.txt 파일에 django-seed==0.2.2 를 입력하고 저장

pip install -r requirements.txt
설치 확인
settings.py

settings.py > INSTALLED_APPS >> django_seed 추가

python manage.py seed shortener --number=50
DB에서 생성된 데이터 확인

50개의 무작위 데이터가 생성된다

 

urls.py
import login_required
views.py > list_view 추가
borads.html 1
borads.html 2

위 의 코드를 작성하고 서버 실행

데이터들이 오름차순으로 정렬되어 표시된다

 

Bootstrap 스타일링

Bootstrap5

부트스트랩 이란?

  • 프론트엔드 개발을 빠르고 쉽게 할 수 있는 프레임워크
  • HTML과 CSS 기반의 템플릿 양식, 버튼, 네비게이션 및 기타 페이지를 구성하는 요소포함
  • 자바스크립트를 선택적으로 확장할 수 있음
  • Github의 오픈 소스로 사용가능, 상업적 이용 가능

프로젝트에 부트스트랩 적용

사이트 접속

https://getbootstrap.com/docs/4.6/getting-started/introduction/

 

Introduction

Get started with Bootstrap, the world’s most popular framework for building responsive, mobile-first sites, with jsDelivr and a template starter page.

getbootstrap.com

위 3가지 코드 모두 복사 하여 적용할 html파일 헤드 부분에 붙혀넣기

원하는 디자인을 찾는다

부트스트랩에서 table 검색 후 맘에 드는 디자인을 찾는다
table class만 복사 붙혀넣기
게시판에 적용된 모습

Django 템플릿 태그

Built-in Django Template Tags

  • {% csrf_token %} 
  • {% cycle "a" "b" %} 
  • {% extends %} 
  • {% block %} 
  • {% if %} {% else %} 
  • {% for I in items %} 
  • {% includes %}

{% cycle "a" "b" %}
list 페이지

cycle 태그를 사용해서 table-dark 디자인과 미리 적용돼 있던 css 디자인이 번갈아가면서 적용된다

base.html 에 부트스트랩 소스추가, body 밑단에 block content 태그 추가
템플릿 폴더에 includ 태그 사용을 위한 파일 html 작성
boards.html에 extends, blcok content, include 태그 작성

list 페이지에서 base.html 화면, include test 내용이 함께 출력된다.

 

Django 커스텀 템플릿 태그 / 필터

언제 필요한가?

  • 데이터 베이스 자료와 보여줘야 하는 자료가 다를 때
  • 반복적으로 같은 템플릿 코드를 작성할 때

Django 로그인 방식

유저 << ( 세션 키 전달 ) << 장고

유저 >> ( 로그인 정보 ) >> 장고 >> ( 세션키 발급 후 DB 저장 ) >> DB

DB에 저장된 세션

JWT ( Json Wep Token ) 과의 차이

JWT 란?

  • 사용자가 로그인을 하면 토큰을 주는데, 이 토큰을 서버가 기억하고 있지 않는다.
    (시간에 따라 바뀌는 어떤 상태값을 안 갖는 것 - stateless, 반대로 세션은 stateful)

JWT 예

  • 암호화된 3가지 데이터를 이어붙인 형태(aaa.bbb.ccc)로 구성됨
    1. header : 알고리즘(3번 서명 값을 만드는데 사용될 알고리즘이 지정 ex) HS256), type이 들어감 (언제나 JWT)
    2. payload : 토큰이 갖는 데이터
    3. verify signature: 1번 헤더에 정의된 알고리즘을 통해 암호화한 비밀 값으로 서버만 알고 있음

장고와의 차이

  JWT 장고 세션
요청마다 DB 조회 Optional Must
정보 변경 가능 가능
저장방식 모든 방법 가능 쿠키
보안 우수 매우 우수( HTTPS 사용 )

 

배포를 위한 Django 설정

디버그, ENV 설정

settings.py

Gunicorn 설치

에러가 발생했다.

ModuleNotFoundError: No module named 'fcntl'

불행히도 윈도우에선 구니콘을 사용할 수 없다고 한다

검색을 해보니 다른 프로그램을 사용해야하는데

pip install waitress

ModuleNotFoundError: No module named 'fcntl' 해결방법

1. pip install waitress

2. waitress-serve --listen=*:8000 앱이름.wsgi:application

 

다만 사진 같은건 불러올 수 없다고 한다.

Gunicorn 이란?

  • 단일 쓰레드로 돌아가는 Django의 활용성을 위하여
    여러개의 워커들을 준비해두고 요청을 처리하는 CGI의 일종

서비스 배포

GCP ( Google Cloud Platform )

https://console.cloud.google.com/

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

무료 체험 신청 > 사용자 인증 > 결제정보 등록

Compute Engine >> VM 인스턴스 >> 사용

 

리전 (서울) > 머신유형 (e2-small) > 부팅디스크 ( 우분투 20.04 ) > 액세스범위 (기본 액세스 허용) > 방화벽 (HTTP)
가상환경 실행

리눅스 환경이기 때문에 명령어를 칠 땐 반드시 $ 표시가 있는 상태에서 해야함

$> sudo apt update

$> sudo apt install python3-pip python3-dev libpq-dev libmysqlclient-dev nginx curl

$> sudo apt-get install python3 python-dev python3-dev build-essential libssl-dev libffi-dev libxml2-dev
libxslt1-dev zlib1g-dev python3-pip
$> sudo -H pip3 install --upgrade pip
$> sudo -H pip3 install virtualenv

 

git clone

위의 파일을 모두 설치한 후 깃에 올려둔 소스코드를 클론해준다

 

$> sudo gunicorn --bind 0:8000 shrinkers.wsgi:application

서버 실행
새 창을 띄워서 연결 확인

>$ sudo vi /etc/systemd/system/gunicorn.service

구니콘 서비스 파일 작성

>$ sudo nano /etc/nginx/sites-available/shrinkers

nginx 셋팅파일 작성

>$ sudo ln -s /etc/nginx/sites-available/shrinkers /etc/nginx/sites-enabled
>$ sudo nginx –t
>$ sudo service nginx restart

nginx 서버 접속

WTF.. 원래는 다른 화면이 떠야하는데 왜 이게 뜨는지 잘모르겠다 ..  분면 셋팅 다 완벽하게 한거같은데 .. 계속 붙잡고 있으면 진도를 못나갈 거 같아서 질문만 해두고 넘어간다..


6주차를 마치며..

진짜 괴로움의 연속이었다 pip 설치 파일들이 꼬인건지 내가 작성한 파일들로는 수업내용처럼 되질 않아서 강사님 코드를 가져다가 하는 수밖에 없었고, 강의에서의 설명이 좀 많이 부족했다 시간을 줄이려다보니 어쩔 수 없었나 ..

과정을 제대로 이해하기는 역부족이지 않나 싶다 이건 따로 구글링으로 죄다 찾아보면서 하는 수밖에 없었는데

수업 내용이 기대했던것 보다 너무 간결해서 아쉬운게 있었다 아무리 국비라지만 좀 .. ㅡㅡ

완전 초보자가 듣기엔 진도 빼기조차 빡센듯함 강의 파일을 깃에서 불러오는 정도는 넣어줄 수 있지 않았나 싶은데

헤매는 분들 꽤 많으실거 같은.. 제대로 수행하지 못한건 일단 제껴두고 진도 부터 뺀후에 다시 살펴보도록 해야겠다

반응형