Knowledge Map

파이썬 프레임워크 플라스크 -1 본문

PYTHON

파이썬 프레임워크 플라스크 -1

2016. 2. 29. 10:54

출처 : http://flask-docs-kr.readthedocs.org/ko/latest/quickstart.html#url


Flask란?

WSGI 마이크로프레임워크. 최소한의 기능만을 제공하여 아주 유연하게 어플리케이션 작성 가능, 많은 기능 원할땐 Django로...

WSGI(Web Server Gateway Interface) : 서버가 웹 어플리케이션과 통신하기 위한 Interface


# -*- coding: utf-8 -*-
# 플라스크 클래스를 Import
# 어플리케이션으로 시작되는지, 혹은 모듈로 임포트 되는지에 따라 이름이 달라진다.
from flask import Flask, url_for
 

# 단일 모듈로 사용한다면 __name__을 사용해야 한다.
# Flask class의 인스턴스를 생성한다. 인자로 모듈이나 패키지의 이름을 넣는다.
app = Flask(__name__)
 

# route() 데코레이터를 사용해서 Flask에게 어떤 URL이 작성한 함수를 실행시키는지 알려준다.
# 작성된 함수의 이름은 그 함수에 대한 URL을 생성하는데 사용되고 그 함수는 사용자 브라우저에 보여줄 메세지를 리턴한다.
@app.route('/')
def hello_world():
    return 'Hello World!'
 

# route() 데코레이터 함수는 함수와 URL을 연결해준다.
@app.route('/python')
def python():
    return 'Hello python!!!'
 

# [변수규칙]
# URL 변수 부분을 추가하기 위해
# <variable_name>``으로 URL에 특별한 영역으로 표시해야된다. 그 부분은 함수의 키워드 인수로써 넘어간다. 
@app.route('/human/<humanname>')
def show_user_profile(humanname):
    return 'Human %s' % humanname
 

# 선택적으로, ``<converter:variable_name> 으로 규칙을 표시하여 변환기를 추가할수 있다.
# 변환기 종류 : int, float, path
@app.route('/post/<int:post_id>')
def show_post(post_id):
    return 'Post %d' % post_id
 

# Flask의 URL 규칙은 Werkzeug의 라우팅 모듈에 기반한다. 그 라우팅 모듈의 기본사상은 아파치나 초기 HTTP서버들에게서
# 제공한 전례에 기반을 둔 잘 구성된 유일한 URL을 보장하는 것이다.
 

# 아래 두 코드는 유사해보이지만 뒷슬래쉬(trailing slash) 사용이 다르다.
# 첫번째는 정규 URL이 뒷슬래쉬를 포함하여 뒷슬래쉬 없이 접근하면 Flask가 정규 URL로 고쳐준다.
# 두번째는 뒷슬래쉬 없이 정의되었으며 뒷슬래쉬 포함해서 접근하면 404Error가 뜬다.
@app.route('/projects/')
def projects():
    return 'The project page'
 
@app.route('/about')
def about():
    return 'The about page'
 

# URI생성
# 라우팅이 설정된 함수에 대한 URL을 얻어내기 위해서 url-for()함수를 사용하면된다.
# 이 함수는 첫번째 인자로 함수의 이름과 URL 룰의 변수 부분에 대한 다수의 키워드를 인자로 받는다.
# 알수 없는 인자는 쿼리 인자로 URL에 덧분여진다.
@app.route('/login')
def login(): pass
 
@app.route('/user/<username>')
def profile(username): pass


# test_request_context 는 파이썬 쉘에서 테스트를 하고 있음에도 지금 실제로 요청을 처리하고 있는 것처럼 상황 제공
with app.test_request_context():
    print url_for('login')
    print url_for('login'next='/')
    print url_for('profile', username = 'John Doe')


# URL을 하드코딩하지 않고 URL을 얻어내는 이유
# 1. URL 역변환이 URL 하드코딩하는 것보다 훨씬 설명적이다.
# 2. 이 방식은 전체적으로 URL이 어디있는지 기억할 필요없이 한번에 URL을 다 변경할 수 잇다.
# 3. URL을 얻어내는 것은 특수 문자 및 유니코드 데이타들에 대한 이스케이핑을 명확하게 해줘서 따로 처리할 필요가 없다.
# 4. 작성한 어플리케이션이 URL의 최상위 바깥에 위치한다면 url_for()가 그 위치를 상대적 위치로 적절하게 처리해줄 것이다.
 

# HTTP 메소드
# HTTP는 URL접근에 대한 몇가지 다른 방식을 제공한다. 기본적으로 GET방식으로 제공되지만, route() 데코레이터에
# methods 인자를 제공하면 다른 방식으로 변경할 수 있다.
@app.route('/signin', methods=['GET''POST'])
def signin():
    if request.method =='POST':
        do_the_signin()
    else:
        show_the_signin_form()
 

# GET방식이 나타난다면 HEAD가 자동적으로 더해질 것이다. 플라스크 0.6에서는 OPTION을 자동으로 처리한다.
# HTTP 메소드
# GET : 브라우저가 어떤 페이지에 저장된 정보를 단지 얻기 위해 서버에 요청하고 서버는 정보를 보낸다.
# HEAD : 브라우저가 어떤 페이지에 저장된 내용이 아니라 헤더라 불리는 정보를 요청한다.
# POST : 브라우저는 서버에게 새로운 정보를 전송하도록 특정 URL에 요청하고 그 정보가 오직 한번 저장되는 것을 보장케한다.
#        이것이 보통 HTML폼을 통해서 서버에 데이터 전송하는 방식이다.
# PUT : POST와 유사하지만 서버가 오래된 값들을 한번 이상 덮어쓰면서 store procedure을 여러번 실행할수 있다.
#       단한번 하는 POST와 달리 브라우저와 서버사이에 정보의 단절없이요청을 다시 안전하게 받을수 잇다.
# DELETE : 주어진 위치에 있는 정보를 제거한다.
# OPTION : 클라이언트에게 요청하는 URL이 어떤 메소드를 지원하는지 알려준다. Flask 0.6부터 이 기능 자동 구현
 
 
 
# 최종적으로 run() 함수를 사용해서 어플리케이션을 로컬 서버에서 실행한다.
# 소스파일을 모듈이 아닌 python인 인터프리터를 이용해서 직접 실행한다면
# __name__ == "__main__": 이 문장은 우리가 실행한 서버가 현재 동작되는 유일한 서버라는 것을 보장한다.
# app.run(host='0,0,0,0')은 외부에서 접근 가능하게 오픈한다.
# app.debug=True 는 서버가 코드 변경을 감지하고 자동으로 리도드, 문제 발생시 디버거 제공한다.
# 대화식 디버거는 임의의 코드가 실행될수 있기 때문에 보안취약점 가능성으로 운영환경에서는 [절대 사용하지 말아야 한다].
if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0', port=5009)
 
cs


'PYTHON' 카테고리의 다른 글

파이썬 강의 필기 1일차  (0) 2016.04.03
python2 & python3 설치  (0) 2016.03.19
크롤링 lxml  (0) 2016.03.13
파이썬 플라스크 sqlalchemy - DB받아오기  (0) 2016.02.29
파이썬 api mysql 연동  (0) 2016.02.26
Comments