본문 바로가기

About/Flask

(17)
[Python] Flask Session 저장, 불러오기, 삭제 session 객체 플라스크가 각각의 클라이언트 요청에 대해 고유한 request 객체를 만드는 것과 같이 session 객체 역시 각 요청에 대해 고유하게 생성됩니다. session 객체는 딕셔너리와 비슷하며, 플라스크가 사용자 측의 쿠키에 직렬화합니다. 세션에 포함된 데이터는 JSON 형태로 나타나며, zlib를 사용해서 압축되고 최종적으로 base64로 인코딩 됩니다. 세션이 직렬화될 때는 itsdangerous 라이브러리가 애플리케이션 레벨에 정의된 secret_key 값을 사용해 컨테츠를 서명합니다. 서명에는 HMAC과 SHA1를 사용합니다. 이 서명은 데이터에 접미사로 추가되며, 데이터에 서명된 비밀 키를 알지 못하면 클라이언트가 쿠키에 저장된 데이터를 변조할 수 없게 합니다. 데이터 자체는 ..
[Python] Flask url_for 함수 url_for 함수 플라스크의 라우팅 시스템에서 흥미 있는 또 다른 기능은 url_for() 함수 입니다. 이 함수는 주어진 뷰의 실제 URL을 반환합니다. 변수와 컨버터에서 사용한 예제를 사용하겠습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 # app.py from flask import Flask, jsonify, request from werkzeug.routing import BaseConverter, ValidationError ​ USERS = {'1': 'Tom', '2': 'John'} IDS = {val: id for id,..
[Python] Flask 변수와 컨버터 변수와 컨버터 Flask의 라우팅 시스템은 '변수' 기능을 제공한다. 구문을 이용하여 변수를 사용할 수 있다. 이 표기법은 거의 표준처럼 사용되고 있으며, 이렇게하여 엔드포인트를 동적으로 표현할 수 있다. 예를 들어 고유한 사용자 ID를 N으로 표현한다고 할 때 ./person/N에 대한 요청을 처리하는 함수를 만들려면 route에 /person/를 인수로 넘겨주면 된다. Flask가 데코레이트 함수를 호출할 때 URL에서 위치의 값을 person_id 인수로 변환해준다. 예시 코드는 다음과 같다. from flask import Flask, jsonify app = Flask(__name__) @app.route('/api/person/') def person(person_id): resp = json..
[Python] boto3를 이용한 Flask-S3 연동 (파일 업로드 및 다운로드) boto3 설치 pip install boto3 s3 config file 정의 # m_config.py AWS_ACCESS_KEY = "SDKNFLWKEFNWEFKEFJA" AWS_SECRET_ACCESS_KEY = "fWEKLFWKLENWK" AWS_S3_BUCKET_REGION = "ap-northeast-2" AWS_S3_BUCKET_NAME = "file-storage" s3 connect 함수 및 파일 업로드/다운로드 함수 정의 # import module import boto3 from .m_config import AWS_ACCESS_KEY, AWS_SECRET_ACCESS_KEY from .m_config import AWS_S3_BUCKET_NAME, AWS_S3_BUCKET_REGIO..
[Python] Flask를 이용한 요청 처리 Flask 애플리케이션을 실행한다는 것은 Flask 클래스의 단일 인스턴스를 띄워 외부에서 들어오는 WSGI 요청을 다루고, 이를 적절한 코드로 전달하여 처리한 후 응답을 반환하는 것입니다. 즉 Flask 는 동기식 웹 프레임워크 입니다. Flask 클래스는 함수를 데코레이트 하는route 함수를 제공합니다. route로 함수를 데코레이트하면 view가 되, Werkzeug의 라우팅 시스템에 등록됩니다. Flask를 설치하는 커맨드는 다음과 같습니다. (파이썬 3.6.5, Ubuntu 16.04LTS에서 실행하였습니다.) pip install flask 다음은 간단한 Flask Application 코드 입니다. #flask_app.py from flask import Flask, jsonify app ..
[Python] MicroService에서 twisted의 문제점 Python을 이용한 웹 서비스에서 동시 요청의 수가 증가하고 이를 처리하는 것이 중요하다면 WSGI 표준(동기식 웹 프레임워크)을 포기하고 tornado나 twisted 같은 비동기 프레임워크를 사용하는 것도 좋습니다. https://twistedmatrix.com/trac/ Twisted Twisted is an event-driven networking engine written in Python and licensed under the open source ​MIT license. It supports CPython 3.5+ and PyPy3. Twisted makes it easy to implement custom network applications. Here's a TCP server th..
[Python] Greenlet과 Gevent(WSGI 성능 향상) WSGI 표준 파이썬 웹 커뮤니티는 웹 서버 게이트웨이 인터페이스(WSGI, Web Server Gateway Interface)라는 표준을 만들었습니다. WSGI는 CGI(Common Gateway Interface)의 영향을 받았으며, 파이썬 어플리케이션이 HTTP 요청을 쉽게 처리할 수 있게 해줍니다. 이 표준에 따라 uwsgi나 mod_wsgi 같은 WSGI 확장을 사용하여 아파치, nginx 등의 웹 서버에서 실행할 수 있습니다. 하지만 WSGI의 가장 큰 문제는 동기 방식 이라는 것입니다. 웹 서버에 요청이 들어올 때마다 함수가 호출되고 함수가 종료될 때 응답을 반환합니다. 즉 함수가 한 번 호출되면 응답을 반환할 때 까지 블록됩니다. 따라서 마이크로서비스에서 WSGI를 적용하면 연동된 서비스..