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에 데이터를 넣으면
DB에서도 바로 확인이 가능하고
DB 유저 테이블 pay_paln_id에 값을 넣어주고
models.py에 pay_plan정보를 출력하는 명령어를 넣어주면
이렇게 CMD 창에서도 확인이 가능하다
Django 회원가입
Django Froms
- 단순 정보 전달성 홈페이지를 만드는것이 아니라면, 유저의 입력을 받아야한다 이것을 Form 이라고 한다
from 생성 >> 템플릿으로 전달 >> 템플릿 렌더링
full_name 추가 후 꼭 makemigraions >> migrate 를 해줘야 DB에 반영이된다
view 파일에 register 함수 추가작성
회원가입 form 작성
로그인, 로그아웃
로그인 함수 이름이 login_view인 이유는 이미 장고에서 지원하는 login과 겹칠 수 있기때문에 이름을 다르게 설정해야한다고 한다
csrftoken으로 위변조를 방지할 수 있다.
Django 게시판
더미 데이터를 만들기 위해 django_seed 를 설치해준다
requirements.txt 파일에 django-seed==0.2.2 를 입력하고 저장
settings.py > INSTALLED_APPS >> django_seed 추가
50개의 무작위 데이터가 생성된다
위 의 코드를 작성하고 서버 실행
데이터들이 오름차순으로 정렬되어 표시된다
Bootstrap 스타일링
부트스트랩 이란?
- 프론트엔드 개발을 빠르고 쉽게 할 수 있는 프레임워크
- HTML과 CSS 기반의 템플릿 양식, 버튼, 네비게이션 및 기타 페이지를 구성하는 요소포함
- 자바스크립트를 선택적으로 확장할 수 있음
- Github의 오픈 소스로 사용가능, 상업적 이용 가능
프로젝트에 부트스트랩 적용
사이트 접속
https://getbootstrap.com/docs/4.6/getting-started/introduction/
위 3가지 코드 모두 복사 하여 적용할 html파일 헤드 부분에 붙혀넣기
원하는 디자인을 찾는다
Django 템플릿 태그
Built-in Django Template Tags
- {% csrf_token %}
- {% cycle "a" "b" %}
- {% extends %}
- {% block %}
- {% if %} {% else %}
- {% for I in items %}
- {% includes %}
cycle 태그를 사용해서 table-dark 디자인과 미리 적용돼 있던 css 디자인이 번갈아가면서 적용된다
list 페이지에서 base.html 화면, include test 내용이 함께 출력된다.
Django 커스텀 템플릿 태그 / 필터
언제 필요한가?
- 데이터 베이스 자료와 보여줘야 하는 자료가 다를 때
- 반복적으로 같은 템플릿 코드를 작성할 때
Django 로그인 방식
유저 << ( 세션 키 전달 ) << 장고
유저 >> ( 로그인 정보 ) >> 장고 >> ( 세션키 발급 후 DB 저장 ) >> DB
JWT ( Json Wep Token ) 과의 차이
JWT 란?
- 사용자가 로그인을 하면 토큰을 주는데, 이 토큰을 서버가 기억하고 있지 않는다.
(시간에 따라 바뀌는 어떤 상태값을 안 갖는 것 - stateless, 반대로 세션은 stateful)
- 암호화된 3가지 데이터를 이어붙인 형태(aaa.bbb.ccc)로 구성됨
1. header : 알고리즘(3번 서명 값을 만드는데 사용될 알고리즘이 지정 ex) HS256), type이 들어감 (언제나 JWT)
2. payload : 토큰이 갖는 데이터
3. verify signature: 1번 헤더에 정의된 알고리즘을 통해 암호화한 비밀 값으로 서버만 알고 있음
장고와의 차이
JWT | 장고 세션 | |
요청마다 DB 조회 | Optional | Must |
정보 변경 | 가능 | 가능 |
저장방식 | 모든 방법 가능 | 쿠키 |
보안 | 우수 | 매우 우수( HTTPS 사용 ) |
배포를 위한 Django 설정
디버그, ENV 설정
Gunicorn 설치
ModuleNotFoundError: No module named 'fcntl'
불행히도 윈도우에선 구니콘을 사용할 수 없다고 한다
검색을 해보니 다른 프로그램을 사용해야하는데
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/
무료 체험 신청 > 사용자 인증 > 결제정보 등록
Compute Engine >> VM 인스턴스 >> 사용
리눅스 환경이기 때문에 명령어를 칠 땐 반드시 $ 표시가 있는 상태에서 해야함
$> 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
위의 파일을 모두 설치한 후 깃에 올려둔 소스코드를 클론해준다
$> sudo gunicorn --bind 0:8000 shrinkers.wsgi:application
>$ sudo vi /etc/systemd/system/gunicorn.service
>$ sudo nano /etc/nginx/sites-available/shrinkers
>$ sudo ln -s /etc/nginx/sites-available/shrinkers /etc/nginx/sites-enabled
>$ sudo nginx –t
>$ sudo service nginx restart
WTF.. 원래는 다른 화면이 떠야하는데 왜 이게 뜨는지 잘모르겠다 .. 분면 셋팅 다 완벽하게 한거같은데 .. 계속 붙잡고 있으면 진도를 못나갈 거 같아서 질문만 해두고 넘어간다..
6주차를 마치며..
진짜 괴로움의 연속이었다 pip 설치 파일들이 꼬인건지 내가 작성한 파일들로는 수업내용처럼 되질 않아서 강사님 코드를 가져다가 하는 수밖에 없었고, 강의에서의 설명이 좀 많이 부족했다 시간을 줄이려다보니 어쩔 수 없었나 ..
과정을 제대로 이해하기는 역부족이지 않나 싶다 이건 따로 구글링으로 죄다 찾아보면서 하는 수밖에 없었는데
수업 내용이 기대했던것 보다 너무 간결해서 아쉬운게 있었다 아무리 국비라지만 좀 .. ㅡㅡ
완전 초보자가 듣기엔 진도 빼기조차 빡센듯함 강의 파일을 깃에서 불러오는 정도는 넣어줄 수 있지 않았나 싶은데
헤매는 분들 꽤 많으실거 같은.. 제대로 수행하지 못한건 일단 제껴두고 진도 부터 뺀후에 다시 살펴보도록 해야겠다
'패스트캠퍼스' 카테고리의 다른 글
[패스트 캠퍼스] 파이썬 강의 8주차 / Rest, Swagger, FastAPI, GCP (1) | 2022.10.11 |
---|---|
[패스트캠퍼스] 파이썬 강의 7주차 / Django (0) | 2022.10.04 |
[패스트캠퍼스] 파이썬 강의 5주차 / CSS 속성, Git, Django (2) | 2022.09.24 |
[패스트캠퍼스] 강의 4주차 / 정규표현식, 프로세스 , Html, CSS (1) | 2022.09.17 |
[패스트캠퍼스] 파이썬 강의 3주차 파이썬 심화 문법/ 문자열, 리스트, 할당과 복사, 매개변수, 함수, 데이터베이스, SQL (2) | 2022.09.11 |