2019-05-18 1st
웹
World Wide Web의 줄임말로 인터넷 상에서 이루어지는 서비스 중 하나로써, 공유 목적으로 개발되었다
Web: naver blog
HTTP
웹 상에서 정보를 주고받을 수 있는 프로토콜, 이때 정보는 보통 HTML문서나, 이미지, 영상 등을 포함합니다
HTTP protocol 특징
Statusless | Connectless |
---|---|
HTTP 프로토콜은 상태가 없다 | HTTP 프로토콜은 상태에 대한 지속적인 연결이 없다 |
이전에 했던 작업, 지금한 작업에 대한 정보를 갖고 있지 않다 | 웹 브라우저의 요청에 대한 응답을 하면 클라이언트와의 접속이 끊긴다 |
연결이 계속되어 있으면 좋을텐데 왜 귀찮게 비연결방식으로 하고 쿠키라는 방식으로 저장을하는거야?
1 | HTTP는 인터넷 상에서 불특정 다수의 통신환경을 기반으로 설계되었다는 점이 포인트입니다 |
많은 클라이언트와의 연결이 원활해지는 장점이 있다면 비연결 지향으로 생기는 단점도 있지 않을까?
1 | 첫번째로 위에서 언급했듯이 쿠키라는 것을 따로 두고 클라이언트 정보를 임시로 저장하는 방법을 채용해야한다 |
HTTP Protocol : tistory1, tistory2
Cookie
HTTP의 특성인 Connectless, Stateless의 문제점을 보완한 것이 바로 Cookie!
Connectionless로 인해 서버는 클라이언트의 요청에 대한 응답을 한 후 연결을 끊기 때문에
다른 페이지로 이동하고 싶을 경우 서버에 재요청을 해야합니다.
재요청시 서버는 클라이언트를 식별할 수가 없는 Stateless특징이 있기 때문에
같은 브라우저에서 요청을해도 서버는 같은 브라우저인지 알 수가 없고, 로그인과 같이
서버가 클라이언트를 기억해야 할 경우에 클라이언트 정보를 저장하지 못한다면
페이지 이동시을 하거나 리로딩같은 재요청을 하는 경우에 계속해서 로그인을 해야 하는 불편함이 있습니다.
이러한 불편함을 해결하기 위해 쿠키라는 것을 저장해서 서버가 클라이언트를 식별할 수 잇도록 합니다
쿠키는 서버에서 생성하여, 클라이언트에서 보낸 특정 정보를 저장합니다.
그리고 쿠키의 속성값은 서버에 요청할 때마다 참조 또는 변경하여 데이터 상태를 관리합니다.
cookie : github blog
Session
Cookie의 단점을 보완하기 위해 생긴 Session! Session은 서버단에서 사용자 정보를 기록할 수 있는 방법입니다
Session?
HTTP session id를 식별자로 구별하여 데이터를 사용자의 브라우저에 쿠키형태가 아닌 접속한 DB에 정보를 저장합니다
클라이언트는 HTTP session id를 쿠키로 메모리 저장된 형태로 가지고 있습니다
메모리에 저장하기 때문에 브라우저가 종료되면 사라지게 됩니다
Session 절차
1 | 1. 클라이언트가 서버에 Resource를 요청합니다 |
뭐야 쿠키만 있음되지 세션은 또 뭐야?
1 | 쿠키에 대한 정보를 HTTP Header에 추가하여 보내기 때문에 상당한 트래픽을 발생시키는 문제가 있습니다 |
Token
세션은 서버의 메모리를 차지하고 있기 때문에 동시 접속자 수가 많은 웹 사이트일 경우 서버 과부화의 원인이 되고, 세션 정보가 중간에 탈취 당할 수도 있기 때문에 완벽하다고 볼수는 없습니다. 그래서 쿠키와 세션의 문제점을 보완하기 위해 Token(토큰) 인증 방식 도입!
Token 인증방식은 보호할 데이터를 토큰으로 치환하여 원본 데이터 대신 토큰을 사용하는 기술
1 | 토큰 방식 이외에 어떤 새로운 기술이 또 생길지 모릅니다 |
HTTPs
HTTPS: tistory
HTTP message
서버와 클라이언트가 HTTP 통신을 할때 주고 받는 메시지
1 | 클라이언트 --> 서버 : Request Message |
Request Message
1 | 요청라인: url |
Response Message
1 | 상태라인: HTTP version |
HTTP Request method
Request Method | Explanation |
---|---|
Get | 요청라인을 통해 자원 요청(url에 데이터 표시) |
Post | 메시지 본문을 통해서 자원 요청(url에서 데이터 숨김) |
Put | URL에서 자원을 생성 |
Delete | URL에서 자원을 삭제 |
Options | 응답 가능한 HTTP Method 요청 |
Head | HTTP Header 정보만 수신 |
Trace | Request의 loop back 테스트 |
Connect | 터널링의 목적으로 연결 요청 |
Client, Server
클라이언트(Request) —> 서버(Response)
브라우저에서 문서확인 <— 문서(요청에 대한 응답) ex) html, json, jpg…
HTTP Status
1 | 200 (OK): 성공적인 응답, 오류 없이 전송 성공 |
HTTP 심화 학습 : ston
301 redirect vs 302 redirect
Resource
일반적으로 리소스란, 사용될 수 있는 어떤 항목을 말한다
프린터나 디스크 드라이브와 같은 장치들이 리소스가 될 수 있으며, 메모리도 마찬가지 이다
쉽게 말해 프로그램을 실행시키기 위해 사용되야 할 자원들, 항목들을 총칭해서 리소스라고 한다
{: .notice}
Resource : naver blog1, naver blog2
Resource 확인하는 법: naver post
ORM
Virtual Environment
Template language
익혀야할 부분
- 자주쓰는 단축키 손에 익히기
- Declaration
- Implementation
- Type Declaration
- Jinja2
2019-05-23 2nd
SQLalchemy
SQLarlchemy는 Python 언어를 위한 ORM이다.
SQL문법을 사용하지 않고 Python class로 스키마를 작성하면 Create table을 한것 처럼 DB table을 생성해준다.
Type
SQLarlchemy 일반 데이터 타입
- 정수형
- BigInteger
- SmallInteger
- Integer
- 실수형
- Float
- 논리형
- Boolean
- 문자형
- String
- Text
- Unicode : 유니코드
- UnicodeText :
- 기간형(시간, 날짜)
- Date : yyyy.mm.dd
- DateTime : Date + Time
- Time : hh:mm:ss
- Interval : 기간
- 열거형
- Enum
- 이진데이터형
- LargeBinary
- MatchType
- Numeric
타사의 데이터 타입
- 정수형
- Integer
- Int
- BigInt
- SmallInt
- 실수형
- Float
- Real
- 문자형
- Char : 고정 문자열
- Varchar : 가변 문자열(메모리를 효율적으로 사용할 수 있다)
- ex) varchar(10)일 때 test를 저장하면 4byte 영역만 차지한다
- nChar : 고정 문자열 + 유니코드 문자열 (char의 2배공간 사용)
- nVarchar : 가변 문자열 + 유니코드 문자열
- 이진데이터형
- Binary
- VarBinary
- 기간형(시간,날짜)
- Date
- DateTime
- TimeStamp
- 파일형
- BLOB
- CLOB
- JSON
- 리스트형(배열)
- Array
WTForms
클라이언트로부터 입력받을 Form을 제공하는 API.
필드의 정의, 유효성 검사, 입력 가져오기, 오류 집계를 포함하는 기능을 제공한다.
Field
일반적으로 데이터베이스 테이블에서 타입을 지정해주는 열을 말한다.
입력 받는 값의 타입.
기본 필드
- 숫자 필드
- FloatField : 실수를 받는 필드
- IntegerField : 정수를 받는 필드
- 문자 필드
- StringField : 문자열을 받는 필드
- 논리형 필드
- BooleanField : True, False를 받는 필드
- 파일 필드
- FileField : 파일을 받는 필드
- MutipleFileField : 여러 파일을 받을 수 있는 필드
- 날짜 필드
- DateField : 날짜를 받는 필드
- DatetimeField : 날짜, 시간을 같이 받는 필드
- 선택형 필드
- RadioField : SelectField와 비슷하지만, 라디오 버튼을의 목록을 보여준다.
- SelectField : 값과 레이블로 이루어진 선택들을 쌍으로 가진다. 값은 어떤것이 와도 된다.
- SelectMultipleField : SelectField와 같지만 여러 선택을 가질 수 있다.
- 버튼형 필드
- SubmitField : Submit 버튼이 눌리는 것을 체크하는 필드
- DecimalField
편리한 필드
HiddenField : 입력 폼이 보이지 않는 필드
PasswordField : 비밀번호를 입력할때 값이 보이지 않도록 하는 필드
TextAreaField : 텍스트를 자유롭고 길게 받을 수 있는 필드
Field Enclosures
FormField : Form을 받는 필드
FieldList : 필드의 인스턴스를 list형태로 받는 필드
커스텀 필드
필요시 직접 필드를 수정해서 사용한다
2019-06-08 3rd
flask_security
admin 페이지에 login 화면 추가
과제
- admin + flask_security + login.html 방법 찾아보기
- 로그인 controller 로직 상세 구현하기
- 출석부 만들기
2019-06-09 4th
app.py 분석하기
1 | # -*- coding: utf-8 -*- |
해당 파일은 utf-8 인코딩 방식을 사용할 것임을 명시해준다.
1 | from flask import Flask |
Flask Project 생성시 만든 가상환경 ‘Flask_venv’에 포함된 flask 모듈안에 있는 app.py 내 선언된 Flask 클래스 를 사용하겠다.
1 | app = Flask(__name__) |
모듈 하나만 사용한다면 __ name__ 이름으로 parameter를 주면 현재 작업하는 파일을 flask 인스턴스로 활용하겠다는 의미. flask 프레임워크를 사용하여 서버 페이지를 작성하겠다, flask로 나만의 app을 만들겠다. 등등 의미로 생각하면 됨.
1 |
|
위에서 app이라는 이름으로 flask를 인스턴스화 했기 때문에 이제 app을 이용하여 flask에 있는 기능을 사용할 수 있게 됐음.
그 중에 route함수는 호출 요청을 분석한 후에 원하는 uri를 처리하는 기능을 담당한다. 따라서 특정 uri로 요청이 들어오면 요청에 알맞은 처리를 담당하는 뷰함수를 실행할 수 있게 route가 매핑을 해준다.
로컬에서 실행하는 경우 ‘localhost:port/‘ 로 요청했을 때 route 데코레이터가 app_start라는 뷰함수에 연결해주어 app_start 함수실행 결과를 return 해주게 된다.
1 | if __name__ = '__main__': |
현재 파일이 메인모듈 파일에서 실행하는 건지 import 모듈에 의해 실행되는건지 확인하는 조건문이다.
만약 메인모듈에서 실행하는 거라면 로컬 서버를 실행해라 라는 뜻.
URL & URI URL은 Uniform Resource Locator(파일 식별자), URI는 Uniform Resource Identifier(통합 자원 식별자)이다. url은 특정 서버의 원하는 리소스의 위치 주소이고, uri는 실제 리소스의 위치가 아닌 rewrite 기술이 적용되어 리소스의 위치 이름을 식별자로서 역할을 할 수 있게 변경된 주소 이름이라고 생각하면 된다.
{: .notice}
In Flask class Default configuration parameters
1 | #: Default configuration parameters. |
Fatal error in launcher: Unable to create process using …
pip list 명령어를 쳤을때 떳던 에러
해결
1 | python.exe -m pip install --upgrade pip |
2019-06-30 5th
flask - mysql 연동하기
‘mysql.h’ No such file or directory 오류
위 오류가 난 상황 : pip install flask-mysqldb 설치할때
오류 명 그대로 mysql.h 파일이 없다는 뜻이다.
해결
1 | 1. https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient.Then 사이트 들어가서 |
출처: tistory, stackoverflow
2019년 8월 21일 6th
기존 DB를 Flask-SQLAlchemy ORM Model로 사용하기
출처: github blog