- Python Microservices Development
- Tarek Ziadé
- 235字
- 2021-07-02 18:54:22
Globals
As discussed earlier in this chapter, Flask provides a mechanism to store global variables that are unique to a particular thread and request context. That's used for request and session, but is also available to store any custom object.
The flask.g variable contains all globals, and you can set whatever attributes you want on it.
In Flask, the @app.before_request decorator can be used to point a function that the app will call every time a request is made just before it dispatches the request to a view.
It's a typical pattern in Flask to use before_request to set values in the globals. That way, all the functions that are called within the request context can interact with g and get the data.
In the following example, we copy the username provided when the client performs an HTTP basic authentication in the user attribute:
from flask import Flask, jsonify, g, request
app = Flask(__name__)
@app.before_request
def authenticate():
if request.authorization:
g.user = request.authorization['username']
else:
g.user = 'Anonymous'
@app.route('/api')
def my_microservice():
return jsonify({'Hello': g.user})
if __name__ == '__main__':
app.run()
When a client requests the /api view, the authenticate function will set g.user depending on the provided headers:
$ curl http://127.0.0.1:5000/api
{
"Hello": "Anonymous"
}
$ curl http://127.0.0.1:5000/api --user tarek:pass
{
"Hello": "tarek"
}
Any data you may think of that's specific to a request context, and could be shared throughout your code, can be shared via flask.g.
- Web前端開發技術:HTML、CSS、JavaScript(第3版)
- Python for Secret Agents:Volume II
- Julia機器學習核心編程:人人可用的高性能科學計算
- Java:Data Science Made Easy
- Java軟件開發基礎
- Linux命令行與shell腳本編程大全(第4版)
- Node.js Design Patterns
- 執劍而舞:用代碼創作藝術
- Python全棧數據工程師養成攻略(視頻講解版)
- 深入淺出Go語言編程
- Java 從入門到項目實踐(超值版)
- Learning Android Application Testing
- Using Yocto Project with BeagleBone Black
- 軟件設計模式(Java版)
- KnockoutJS Blueprints