[python] Flask
<converter:variable_name>
컨텍스트 전역 변수
수신한 HTTP request 정보에 접근하기 위해서 컨텍스트 전역 변수를 사용한다.
이런 정보들을 리퀘스트를 수신할 때 마다 뷰 함수의 인자로 넘기도록 해도 되는데, 쓸데없이 인자를 많이 가지고 있게 되는 것을 피하기 위해 플라스크는 이를 전역 변수 형식으로 제공한다.
근데 실제 전역 변수는 아니다. 멀티스레드 환경에서 못쓰니까. `` request`` 변수가 전역변수 처럼 동작하기는 하지만 실제로는 스레드들은 각각 다른 오브젝트를 처리하게 된다.
컨텍스트는 어플리케이션 컨텍스트/리퀘스트 컨텍스트로 나눌 수 있다.
current_app | 어플리케이션 컨텍스트 | 활성화된 어플리케이션을 위한 어플리케이션 인스턴스 |
g | 어플리케이션 컨텍스트 | 리퀘스트를 처리하는 동안 어플리케이션이 임시 스토리지로 사용할 수 있는 오브젝트. 리퀘스트 마다 리셋됨. 주로 request hooks와 뷰 함수가 데이터를 주고 받을 때 사용한다. 예를 들어 `` before_request`` 훅이 DB에서 정보를 받아와서 g변수에 넣어두면 뷰 함수가 이를 사용하는 식. |
request | 리퀘스트 컨텍스트 | HTTP request의 컨텐츠를 캡슐화하는 리퀘스트 오브젝트. |
session | 리퀘스트 컨텍스트 | 사용자 세션. "remembered"인 값들을 저장하는데 사용하는 딕셔너리. |
플라스크는 리퀘스트를 디스패치(처리)하기 전에 어플리케이션과 리퀘스트 컨텍스트를 활성화(push)하며, 리퀘스트가 처리된 후 컨텍스트를 삭제한다. current_app, g는 어플리케이션 컨텍스트가 push되어야 사용 가능하고, request, session도 마찬가지로 리퀘스트 컨텍스트가 push 되어야 사용 가능하기 때문에 그냥 이 변수에 접근하기 위해서는 먼저 push해주어야 한다.
리퀘스트 훅 (request hooks)
```python
before_first_request : 첫 번째 리퀘스트가 처리되기 전에 실행
before_request : 각 리퀘스트 전에 실행됨.
after_request : 처리되지 않는 예외가 발생하지 않는다면 리퀘스트 이후 실행
teardown_request : 처리되지 않는 예외가 발생하더라도 리퀘스트 이후 실행
```
Jinja2의 유용한 기능
- macro - import : 함수같은.
- include : inline같은거라고 이해하면 된다.
- extends : 상속.
웹 소켓 Flask-SocketIO
room
flask-bootstrap
json 데이터 리턴할 때 ( ajax )
```python
json.dumps(log_records, default= lambda o: o.__dict__)
```
'Languages & Frameworks > Python' 카테고리의 다른 글
[python] 성능 측정, 프로파일링(profiling) (0) | 2018.11.12 |
---|---|
[python] socket (0) | 2018.11.10 |
[python] docstring, 문서화 (0) | 2018.10.15 |
[python] @property, getter setter, private 필드 (0) | 2018.08.07 |
[python] time, date, datetime (0) | 2017.11.12 |