본문 바로가기

flask

(11)
[Flask] JWT access token 인증(로그인 토큰 인증) Access Token을 생성하는 방법은 여러 가지가 있는데, 가장 널리 사용되는 기술은 중 하나가 바로 JWT(JSON Web Tokens)입니다. JSON Web Token은 이름 그대로 JSON 데이터를 token으로 변환하는 방식입니다. Flask에서 이를 이용하여 웹 토큰 인증을 하는 것을 다루어 보겠습니다. 예제에서는 PyJWT 1.4.0 버전과 bcrypt 3.2.0 버전을 이용합니다. pip3 install PyJWT==1.4.0 pip3 install bcrypt==3.2.0 Access Token 인증 과정은 다음과 같습니다. 1. 토큰 생성 2. 토큰 사용 예시 코드 로그인 시 인증 확인 후 Access 토큰 생성 (Flask router) @bp.route('/login', meth..
[Flask] Session 객체를 이용한 동기식 호출 Session 객체 생성 Flask Application 객체의 extensions에는 애플리케이션의 특정 상태 등을 저장할 수 있습니다. 다음 코드는 Session 객체를 저장하는 용도로 사용합니다. extensions를 먼저 등록한 다음 Session을 추가합니다. #flask_session.py from requests import Session def setup_connector(app, name='default', **options): if not hasattr(app, 'extensions'): app.extensions = {} if 'connectors' not in app.extensions: app.extensions['connectors'] = {} session = Session()..
[Flask] Flask-SQLAlchemy 사용해보기 Flask-SQLAlchemy는 Flask의 확장 모듈로 데이터베이스 ORM입니다.(Object Relational Mapping) https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/ Quickstart — Flask-SQLAlchemy Documentation (2.x) Quickstart Flask-SQLAlchemy is fun to use, incredibly easy for basic applications, and readily extends for larger applications. For the complete guide, checkout the API documentation on the SQLAlchemy class. In..
[Flask] 에러 처리 (사용자 정의 에러 핸들러, JSON 에러 핸들러) 사용자 정의 처리 핸들러 HTML 웹 어플리케이션에서는 404, 50x 에러가 발생하면 보통 특정 HTML 페이지를 보여준다. 플라스크는 자동으로 이렇게 동작하지만, 마이크로서비스에서는 클라이언트에 보내는 응답을 좀 더 조정할 필요가 있다. 이 때 유용한 기능이 사용자 정의 에러 핸들러(custum error handler)이다. JSON을 사용하여 마이크로서비스를 구현할 때는 클라이언트에 보내는 모든 동작을 JSON 포맷으로 맞추는 것이 관례이다. 마이크로서비스를 사용하는 클라이언트는 모든 응답을 파싱할 필요가 있기 때문이다. 플라스크는 app의 에러 처리를 조정할 수 있는 여러 함수를 제공한다. 첫 번째는 @app.route 처럼 동작하는 @app.errorhandler 데코레이터다. 이 데코레이터는..
[Flask] Jinja2 템플릿을 이용한 이메일 생성 플라스크는 텍스트 기반의 문서를 다루기 위해 Jinja라는 템플릿 엔진을 포함한다. 플라스크가 Jinja와 통합한 주된 이유는 HTML 문서를 생성하기 위해서이다. render_template() 같은 함수는 Jinja 템플릿과 주어진 테스트를 사용해 응답을 만든다. Jinja는 꼭 HTML 이나 다른 태그 기반의 문서만 사용할 수 있는 것은 아니고, 텍스트 기반이라면 어떤 문서도 만들 수 있다. 다음은 이메일 템플릿의 예시이다. Date: {{date}} From: {{from}} Subject: {{subject}} To: {{to}} Content-Type: text/plain Hello {{name}}, We have received your payment! Below is the list of ..
[Python] Flask Signal (Blinker) 시그널 플라스크는 시그널(signal) 라이브러리인 Blinker 를 통합한다. 이 라이브러리는 특정 이벤트를 '구독' 했다가 이벤트가 발생했을 때 필요한 함수를 실행한다. 여기서 말하는 이벤트는 고유한 이름표를 갖고 blinker.signal 클래스를 통해 생성된 인스턴스이다. 플라스크 0.12는 요청을 처리하는 과정 중 중요한 순간마다 총 10개의 시그널을 발생시킨다. (시그널은 다음 사이트 참고) 시그널은 connect 함수를 사용해서 특정 이벤트를 등록할 수 있다. 시그널은 코드가 시그널의 send 함수를 호출하면 트리거된다. send 함수는 추가적인 인수를 받아서 모든 등록된 함수에 데이터를 전달한다. 다음 예제에서는 request_finished 시그널에 finished 함수를 등록한다. 우선..
[Python] Flask 전역 공간 (Flask.g) 전역 공간 flask.g 변수에는 모든 전역 정보가 포함돼있고, 원하는 어떤 속성이든 여기에 설정할 수 있다. 플라스크에서 @app.before_request 데코레이터는 요청이 만들어지고 뷰에 전달하기 직전에 호출할 함수가 있을 때 사용한다. before_request 를 사용하는 일반적인 경우는 전역 공간에 값을 저장할 때 이다. before_request 를 사용하면 컨텍스트 안에서 요청되는 모든 함수는 g 변수를 사용해서 데이터를 얻을 수 있다. 다음 예시를 보자 from flask import Flask, jsonify, g, request app = Flask(__name__) @app.before_request def authenticate(): # request.authorization u..
[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..