먼저 데이터베이스를 연결하기 위한 connect_db()함수를 만든다. 이 함수는 DATABASE 변수에 저장되어 있는 '/tmp/testnet.db' sqlite3 파일경로/이름을 사용하여 DB를 연결한다.
def connect_db():
return sqlite3.connect(app.config['DATABASE'])
Flask에서는 request 요청 전후에, before_request, after_request, teardown_request 데코레이션을 사용할수 있다. before_request는 request요청전에 호출이 되고, after_request는 request요청 후에 호출이 된다. after_request는 예외사항 발생시 실행이 안될수 도 있기 때문에, teardown_request를 사용하며, 이 함수는 exception 객체를 변수로 받는다. g 객체는 Flask에서 사용되는 특별한 객체로, database작업을 위해 사용된다. application.py 파일에 위의 connect_db함수와 다음 두 함수를 입력한다.
# 모든 request 전에 DB컨넥션을 가져오고
@app.before_request
def before_request():
g.db = connect_db()
# reqest가 끝난 이후에 DB컨넥션을 닫는다.
@app.teardown_request
def teardown_request(exception):
g.db.close()
예를 들어 아래과 같이 request 가 호출되면, show_entries()함수가 실행되기 전 자동으로 위의 before_request()함수가 호출된 다음 show_entries() 함수가 실행되고 실행이 끝난 다음 teardown_request()함수가 실행이 되어 손쉽게 db 작업을 수행할 수 있게 된다. 아래 소스는 entries 테이블에서 데이터를 읽기만 하고, 웹브라우저 화면에는 ok 텍스트만 출력한다.
@app.route('/')
def show_entries():
cur = g.db.execute('select title, text from entries order by id desc')
entries = [dict(title=row[0], text=row[1]) for row in cur.fetchall()]
return "ok"
전체 소스
import sqlite3, sys
from flask import Flask, request, session, g, redirect, url_for, \
abort, render_template, flash
# configuration
DATABASE = '/tmp/testnet.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'
app = Flask(__name__)
app.config.from_object(__name__)
@app.before_request
def before_request():
g.db = connect_db()
@app.teardown_request
def teardown_request(exception):
g.db.close()
def connect_db():
return sqlite3.connect(app.config['DATABASE'])
@app.route('/')
def show_entries():
cur = g.db.execute('select title, text from entries order by id desc')
entries = [dict(title=row[0], text=row[1]) for row in cur.fetchall()]
return "ok"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=int(sys.argv[1]))
'Programming > Python' 카테고리의 다른 글
Flask 웹사이트 구축 - 6. 템플릿과 스타일시트 추가하기 (0) | 2022.06.28 |
---|---|
Flask 웹사이트 구축 - 5. 웹페이지(html) 렌더링을 하는 뷰 함수들 (0) | 2022.06.27 |
Flask 웹사이트 구축 - 3. 메인 웹어플리케이션 생성 (0) | 2022.06.21 |
Flask 웹사이트 구축 - 2. 개발방향과 데이터베이스(sqlite3) (0) | 2022.06.21 |
Flask 웹사이트 구축 - 1. 개발환경 goormIDE 준비 (0) | 2022.06.20 |