Knowledge Map
파이썬 프레임워크 플라스크 -1 본문
출처 : 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