flask源码分享内容
1.请求和响应对象:
Flask 提供了 request
和 response
对象,分别用于表示客户端的请求和服务器的响应。这些对象提供了访问请求参数、请求头信息、响应数据等相关操作的方法和属性。
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/login', methods=['POST'])
def login():
username = request.form.get('username')
password = request.form.get('password')
if username == 'admin' and password == '123456':
response = {'status': 'success', 'message': 'Login successful'}
else:
response = {'status': 'error', 'message': 'Invalid credentials'}
return jsonify(response)
if __name__ == '__main__':
app.run()
2.上下文管理器:
Flask 使用上下文管理器机制来管理请求上下文和应用上下文。上下文管理器可以确保在某个上下文范围内,相关的对象能够被正确地创建、绑定和销毁。
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def index():
with app.request_context(request):
# 在请求上下文范围内使用 request 对象
username = request.args.get('username')
return f'Hello, {username}!'
if __name__ == '__main__':
app.run()
3.上下文全局变量:
Flask 使用上下文全局变量来存储和共享在整个请求上下文或应用上下文中需要跨函数传递的数据。这些变量可以通过 current_app
、g
和 session
等对象进行访问。
from flask import Flask, g
import sqlite3
app = Flask(__name__)
app.config['DATABASE'] = 'example.db'
def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(app.config['DATABASE'])
return db
@app.route('/')
def index():
db = get_db()
# 使用数据库连接执行查询操作
if __name__ == '__main__':
app.run()
4.路由和视图函数:
Flask 使用装饰器语法来定义路由和视图函数的映射关系。通过使用 @app.route
装饰器,可以将一个 URL 路径和对应的视图函数进行绑定,使得客户端请求该 URL 时能够触发相应的视图函数。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello, Flask!'
@app.route('/user/<username>')
def user_profile(username):
return f'Hello, {username}!'
if __name__ == '__main__':
app.run()