Programming/Python

Flask 웹사이트 구축 - 3. 메인 웹어플리케이션 생성

juhpark 2022. 6. 21. 08:53
반응형

여기서는 구름IDE가 기본적으로 생성한 application.py 파일을 변경하여 작업을 하도록 할 예정이다. 먼저 필요한 패키지를 다음과 같이 import 한다. 기존에 있던 from flask import Flask 와 import sys 구문은 삭제한다.

import sqlite3, sys
from flask import Flask, request, session, g, redirect, url_for, \
     abort, render_template, flash

 

그리고, 앞으로 사용하게 될 다음과 같은 환경 변수들을  추가한다.

  • DATABASE는 sqlite3을 통해 관리하게 될 데이터파일의 위치와 그이름을 나타낸다.
  • DEBUG가 True인 경우, 소스파일을 변경할때 실시간으로 변경된 파일을 반영하게 한다.
  • SECRET_KEY는 클라이언트에서 세션을 안전하게 보장하기 위해 사용한다. (복잡한 것을 선택하는게 좋음)
  • USERNAME, PASSWORD는 로그인정보로 사용하기 위해 임시로 만든 변수다.
# configuration
DATABASE = '/tmp/testnet.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'

 

Flask객체를 제일 처음 생성한다. from_object()는 입력된 __name__의 선언된 대문자 변수, 즉 위의 환경변수들을 읽어들여 Flask의 환경변수에 적용하는 역할을 한다. 

app = Flask(__name__)
app.config.from_object(__name__)

 

만약 별도 화일에 환경변수를 선언해서 사용하고자 하는 경우에는 from_envvar()함수를 사용한다. silent=True이면 해당 환경변수가 존재하지 않아도 동작하도록 한다.

app.config.from_envvar('파일명', silent=True)

 

아래 소스의 @app.route("/")는 URL에 홈을 호출했을때, 그 아래 선언된 함수를 실행하고, return 으로 반환되는 문자열을 홈페이지에 보여주게 된다. 웹페이지를 호출하면, "Hello goorm!" 글자를 보여준다.

application.run은 바인인 되는 IP, PORT를 입력 받아 Flask 웹서버를 실행한다. 

@app.route("/")
def hello():
    return "Hello goorm!" 
 
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=int(sys.argv[1]))

 

전체 소스는 다음과 같다.

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.route("/")
def hello():
    return "<h1>Hello TestNet!</h1>" 
 

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=int(sys.argv[1]))

 

실행방법은 

python application.py 80

 

웹페이에서 호출을 하게 되면, 다음과 같은 화면이 보이게 된다.

 

참고로 구름IDE에서 도메인을 설정하는 방법은 오른쪽 상단 "미리보기" 메뉴에서 실행URL과 포트설정을 눌러서 원하는 도메인으로 바꾸면 위와 같은 도메인을 사용할 수 있다.

반응형