웹개발 gpt 4주차
flask 폴더 구조!
Project 폴더 구조
- - -
Project
|— venv
|— app.py (서버)
|— templates
|— motto.html (클라이언트 파일)
|— music.html (클라이언트 파일)
flask는 만들 프로젝트의 폴더 구조가 정해져 있다!
폴더 안에 app.py 파일을 생성 (이름을 변경할 수는 있지만 라이브러리 이름과 달라야 한다.)폴더 안에 templates 폴더를 생성 (이 폴더는 고정!!)templates 폴더 안에 index.html 파일을 생성 (기본적으로 이 이름을 사용)
웹 사이트에서 데이터가 필요한 경우에는 Python으로 크롤링하거나 Database에서 필요한 데이터를 만들고, HTML로 넘겨서 사용한다.
app.py 에서 변수 name 을 만들고, render_template 에서 html에서 쓸이름 = python 변수
형식으로 넘겨준다. 즉, html에서는 data라는 이름으로 name 변수를 사용하겠다는 의미.
@app.route("/")
def home():
name = "sparta"
return render_template("motto.html", data=name)
.html 의 코드를 아래와 같이 변경. 이제 python 에서 넘겨준 data에 따라 화면에 출력되는 값이 변경된다.
<div class="greeting">
<h1>Hello, {{ data }}</h1>
<h1 id="current-time"></h1>
</div>
여러 데이터를 넘겨주고 싶을때
아래와 같이 name과 motto 변수를 만들어주고, context 딕셔너리에 넣어준다.
@app.route("/")
def home():
name = "sparta"
motto = "한 번 뿐인 나의 인생... 행복하자"
context = {
"name": name,
"motto": motto
}
return render_template("index.html", data=context)
.html에서 data 딕셔너리에 담긴 name을 사용해야 하므로{{ data.name }} 형식으로 쓰면 된다.
<div class="container">
<div class="greeting">
<h1>Hello, {{ data.name }}</h1>
<h1 id="current-time"></h1>
</div>
<div class="todo">
<h3>My life's motto</h3>
<h2>{{ data.motto }}</h2>
</div>
</div>
주소에 따라 메인 화면 인사말 바꾸기
@app.route("/iloveyou/<name>/")
def iloveyou(name):
motto = f"{name}야 난 너뿐이야..."
context = {
"name": name,
"motto": motto
}
return render_template("motto.html", data=context)
route() 부분에 <name> 와 같이 <>를 사용하면, url 주소에 따라서 name을 변수처럼 쓸 수 있다.
예를 들면 http://127.0.0.1:8080/iloveyou/minky 라면 name 에는 minky가 들어간다.
database(DB)
database는 왜 쓰는 것일까? ---> 잘 넣어두기 위해서, 나중에 잘 찾기 위해서
database는 index라는 순서로 데이터들이 정렬되어 있다.
database에는 두 종류가있다.
RDBMS(SQL)
행/열의 생김새가 정해진 Excel에 데이터를 저장하는 것과 유사합니다. 데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어려울 것입니다. 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있습니다.
ex) SQLite, MS-SQL, My-SQL 등
No-SQL
딕셔너리 형태로 데이터를 저장해두는 Database입니다. 고로 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 됩니다. 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있습니다.
ex) MongoDB
SQLite
- 작지만 빠르고 탄탄하므로 SQLite는 세계에서 가장 많이 사용되는 데이터베이스 중 하나다.
- SQLite와 같은 데이터베이스에서 데이터를 다루기 위해서는 보통 SQL을 사용해야 하는데
- SQL을 사용하는 것보다 손쉽게 데이터베이스를 다룰 방법이 있다.
- 바로 ORM 이라는 걸 사용하는 것. ORM은 쉽게 얘기하자면 프로그래밍 언어(지금은 Python)으로 데이터베이스를 다루는 방법이라고 알아두면 된다.
- Python에는 기본적으로 SQLite가 내장되어 있으므로 별도 설치 없이 VScode에서 파일이름.db 형식으로 파일을 만들기만 하면 손쉽게 사용할 수 있다.
테이블 만들기
db.create_all() 로 실제로 사용할 테이블(시트)을 만들 수 있다.
만약 테이블을 없애고 싶다면 db.drop_all() 을 하면 된다.
# 데이터를 DB에 저장하기
song = Song(username="추천자", title="노래제목",
artist="가수", image_url="이미지 주소")
db.session.add(song)
db.session.commit()
# 모든 데이터 조회하기
song_list = Song.query.all()
# 데이터 1개 가져오기
Song.query.filter_by(id=3).first()
# 데이터 변경하기
song_data = Song.query.filter_by(id=4).first()
song_data.title = '변경된제목'
db.session.add(song_data)
db.session.commit()
# 데이터 삭제하기
delete_data = Song.query.filter_by(id=4).first()
db.session.delete(delete_data)
db.session.commit()