1,路由和视图函数:
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()
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 提供了 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()
4,模板引擎:
Flask 内置了简洁而强大的模板引擎——Jinja2。模板引擎允许你在 HTML 文件中编写灵活的动态内容,使得开发动态网页变得更加容易和可维护。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
username = 'John'
return render_template('index.html', username=username)
if __name__ == '__main__':
app.run()
5,错误处理:
Flask 提供了对各种 HTTP 错误状态码的处理机制,可以通过装饰器 @app.errorhandler
来定义处理特定状态码的错误处理函数,确保在出现错误时返回适当的响应。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
# 触发一个自定义错误
abort(404)
@app.errorhandler(404)
def page_not_found(error):
return 'Page not found', 404
if __name__ == '__main__':
app.run()
6,上下文全局变量:
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()
7,扩展机制:
Flask 允许你通过扩展来增加额外的功能和特性。Flask 的扩展可以简化常见任务,如数据库访问、表单处理、身份验证等,极大地提升了开发效率。