본문 바로가기

Python

(41)
[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..
[Python] 함수 실행 시간 측정 (Python decorator 활용) decorator 함수 정의 def logging_time(original_fn): import time from functools import wraps @wraps(original_fn) def wrapper(*args, **kwargs): start_time = time.time() result = original_fn(*args, **kwargs) end_time = time.time() print("WorkingTime[{}]: {} sec".format(original_fn.__name__, end_time - start_time)) return result return wrapper logging_time() 함수 사용 @logging_time def func(): ... 함수 내용 ... ..
[백준 21608번] 상어 초등학교 (Python) 문제 더보기 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N^2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호가 매겨져 있고, (r, c)는 r행 c열을 의미한다. 교실의 가장 왼쪽 윗 칸은 (1, 1)이고, 가장 오른쪽 아랫 칸은 (N, N)이다. 선생님은 학생의 순서를 정했고, 각 학생이 좋아하는 학생 4명도 모두 조사했다. 이제 다음과 같은 규칙을 이용해 정해진 순서대로 학생의 자리를 정하려고 한다. 한 칸에는 학생 한 명의 자리만 있을 수 있고, |r1 - r2| + |c1 - c2| = 1을 만족하는 두 칸이 (r1, c1)과 (r2, c2)를 인접하다고 한다. 비어있는 칸 중에서 좋아하는 학생..
[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를 적용하면 연동된 서비스..
[백준 15686번] 치킨 배달(Python) https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 문제 더보기 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸을 의미한다. r과 c는 1부터 시작한다. 이 도시에 사는 사람들은 치킨을 매우 좋아한다. 따라서, 사람들은 "치킨 거리"라는 말..