21.11.05 7주차 2-1, 2-2 RDB로 리소스 관리 및 저장하기 & SQL Alchemy

2021. 11. 6. 21:59작업/Flask

----------------------------7주차 2-1 ( RDB로 리소스 관리 및 저장하기 )--------------------

# 데이터베이스의 종류와 특징, Flask에서 DB가 하는 역할, JWT란?

 

#데이터베이스 : 데이터를 저장하는 공간, 관계형 데이터베이스(RDB)와 NoSQL(Not Only SQL)로 나뉘어져 있다.

 

#관계형 데이터베이스 : key와 value들의 간단한 관계를 테이블 화 시킨 데이터베이스

- 정형화 되어있다. DML을 사용해서 데이터 간 결합(외래키,유일키) , 제약조건 등 설정 가능. 테이블 간 데이터 관계 설정 가능

 

로그인 : 브라우저에서 사용자가 Id,PW 입력, 서버에서 API가 database내의 Id와 PW와 같은지 확인,

만약 같다면 cookie나 session 등으로 인증완료 응답을 해줌.

게시판 읽기 : 브라우저에서 사용자가 요청, 서버에서 API가 database내에 있는 게시글을 불러와서 브라우저에게 전달.

 

# 간단한 게시판 만들기

사용자 검색, 사용자 추가(중복 사용자 방지), 게시판 CRUD

 

# 게시판 등록

con=sqlite3.connect(정보)

# Create

cur.excute( " INSERT INTO board(name,context) values(?,?) " , (name,context) )

# Read

cur.excute( " SELECT * FROM board WHERE name=name, context=context" )

 

실습 1 사용자 정보 검색 con, cur fetchall 시작

실습 2 DB 사용자 추가 request.method , request.form , redirect(url_for('어쩌구.html의 html생략')) 

실습 3 중복 사용자 방지 cur.execute(f"SELECT ~~ WHERE name='{name}'")

/add

실습 4 게시판 내용 수정 및 삭제 cur.execute(f"DELETE ~~ WHERE name='{uid}'") 

board.html row는 row = cur.fetchall()
/update/바꾸고자하는부분이름 여기선 Dodo
/?_=4636472

# Flask JWT

JWT JSON Web Token, Token은 인증 매개체라고 생각하면 됨. 암호화되어있기 때문에 안전. Base64로 인코딩되어 표현.

# Header: typ 타입과 alg 알고리즘 저장.

# Payload: 토큰에서 사용할 정보의 조각들인 클레임(Claim)이 담겨있다. 클레임은 registered, public, private claim이 있다.

 

- registered 클레임는 등록된,이미 정해진 종류의 데이터이다. 토큰 발급자, 토큰 제목, 대상자, exp(만료시간), iat(issued at) ,고유식별자 jti

- 공개 클레임 : 충돌이 방지된 이름

- 비공개 클레임 : 서버와 클라이언트 협의로 사용되는 클래임. 이름이 중복되어 충돌 간으하니 유의

 

# Signature: 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드

실습 5 JWT를 이용한 로그인 토큰 발급 jwt.encode

등록된 아이디와 패스워드를 쳤을 경우

등록되지 않은 이상한 아이디,비번 친 경우

 

------------------------------7주차 2-2 ( SQL Alchemy와 Query )----------------------------

# SQL Alchemy와 ORM

- SQL ALchemy : 모듈

- ORM : 데이터베이스를 다루는 형태

 

# DB와 Model

 

# Query 

- SQL : SELECT, INSERT ,UPDATE, DELETE

- ORM (models.py) : SQL(DB)을 Model을 사용해 python코드로 객체(클래스)를 통해 쓰는 느낌? 

ex INSERT INTO 테이블 (키) VALUES (값); -> 

#SQL Alchmy : ORM을 쓸 수 있도록 도와주는 python 라이브러리

- DB와 server간의 connection과 DB data의 CRUD를 도와줌.

db = SQLAlchemy() 를 사용하겠다 고 먼저 써주고 나서

VARCHAR(20) 이런 느낌

 

 

실습 1 Model 만들기 db.session.add( 변수 ) db.session.query( 클래스 ).all() 

app.py

실습 2 입력한 데이터를 model을 사용하여 자료 추가 Member( request.form['name'], request.form['name'])

입력한 데이터를 

# Query - CRUD 예제

# Create

# Update( read 후 수정 )

# Delete( read 후 삭제 )

Query 사용법들

Member.query 랑 같은 것 db.session.query

null은 ==None
not in은 ~Member

limit

offset

count

 

실습 3 equal, not equal, like

 

실습 4 in , not in

 

실습 5 is null, is not null

models.py

실습 6 and or

search.html

실습 7 order by

 

실습 8 .limit().offset() , 쿼리문 실행결과.count()

전 후 limit 20 offset 2