Flask 核心知识点Flask 是一个轻量级的 Python Web 框架它设计简洁、灵活非常适合初学者入门 Web 开发也适合构建小型到中型的应用。本文将从基础概念讲到高级用法帮助你系统掌握 Flask 的核心知识。## 一、基础概念路由与视图函数Flask 的核心是路由Routing和视图函数View Function。路由决定了 URL 如何映射到 Python 函数而视图函数则处理请求并返回响应。### 1.1 安装 Flask首先确保你已经安装了 Python推荐 3.6然后使用 pip 安装 Flaskbashpip install flask### 1.2 第一个 Flask 应用创建一个简单的 Flask 应用只需要几行代码。python# app.pyfrom flask import Flask# 创建 Flask 应用实例app Flask(__name__)# 定义路由和视图函数# 当用户访问根路径 / 时调用 home() 函数app.route(/)def home(): return Hello, Flask!# 当用户访问 /about 时调用 about() 函数app.route(/about)def about(): return This is the about page.# 启动应用if __name__ __main__: app.run(debugTrue) # debugTrue 开启调试模式代码修改后自动重载运行python app.py访问http://127.0.0.1:5000/即可看到 “Hello, Flask!”。### 1.3 动态路由Flask 支持动态路由允许在 URL 中传递参数。python# 动态路由示例# username 是占位符Flask 会将其传递给视图函数app.route(/user/username)def show_user_profile(username): # 返回包含用户名的响应 return fUser: {username}# 指定参数类型默认为字符串app.route(/post/int:post_id)def show_post(post_id): return fPost ID: {post_id}## 二、模板引擎Jinja2Flask 默认集成了 Jinja2 模板引擎可以将 Python 数据渲染到 HTML 页面中。### 2.1 模板基础在项目目录下创建templates文件夹存放 HTML 模板文件。html!-- templates/index.html --!DOCTYPE htmlhtmlhead titleFlask 模板示例/title/headbody h1Hello, {{ name }}!/h1 !-- 使用 {{ }} 插入变量 -- pYour age is: {{ age }}/p/body/html### 2.2 渲染模板在视图函数中使用render_template渲染模板。pythonfrom flask import Flask, render_templateapp Flask(__name__)app.route(/)def index(): # 传递数据到模板 return render_template(index.html, nameAlice, age25)if __name__ __main__: app.run(debugTrue)### 2.3 模板控制结构Jinja2 支持条件判断和循环。html!-- templates/list.html --ul{% for item in items %} !-- 循环 -- li{{ item }}/li{% endfor %}/ul{% if user.is_admin %} !-- 条件判断 -- pWelcome, admin!/p{% endif %}## 三、请求与响应处理Web 应用的核心是处理 HTTP 请求并返回响应。Flask 提供了request对象来获取请求数据。### 3.1 处理表单数据pythonfrom flask import Flask, request, render_template_stringapp Flask(__name__)# 一个简单的登录表单app.route(/login, methods[GET, POST]) # 同时支持 GET 和 POSTdef login(): if request.method POST: # 从表单中获取数据 username request.form[username] password request.form[password] if username admin and password 123: return fWelcome, {username}! else: return Invalid credentials # GET 请求时显示表单 return render_template_string( form methodpost Username: input typetext nameusernamebr Password: input typepassword namepasswordbr input typesubmit valueLogin /form )if __name__ __main__: app.run(debugTrue)### 3.2 获取 URL 参数除了动态路由还可以通过查询字符串传递参数。pythonapp.route(/search)def search(): query request.args.get(q, default) # 获取 ?qxxx 参数 return fSearch query: {query}## 四、会话管理与 CookiesFlask 提供了对 Cookies 和 Session 的支持用于管理用户状态。### 4.1 使用 Cookiespythonfrom flask import make_responseapp.route(/set_cookie)def set_cookie(): resp make_response(Cookie set!) resp.set_cookie(username, Alice) # 设置 Cookie return respapp.route(/get_cookie)def get_cookie(): username request.cookies.get(username, Guest) return fHello, {username}### 4.2 使用 SessionSession 基于 Cookies但数据存储在服务器端更安全。pythonfrom flask import session# 设置密钥必须app.secret_key your-secret-key-here # 生产环境应使用随机字符串app.route(/login)def login(): session[user] Alice # 存储 session 数据 return Logged in!app.route(/profile)def profile(): user session.get(user, Guest) return fProfile page for {user}app.route(/logout)def logout(): session.pop(user, None) # 移除 session 数据 return Logged out!## 五、错误处理与蓝图### 5.1 自定义错误页面pythonapp.errorhandler(404)def not_found(error): return render_template(404.html), 404 # 返回状态码app.errorhandler(500)def internal_error(error): return Server error, 500### 5.2 蓝图Blueprint蓝图允许将应用分割为模块便于大型项目组织代码。python# auth.pyfrom flask import Blueprint, render_templateauth_bp Blueprint(auth, __name__, url_prefix/auth)auth_bp.route(/login)def login(): return Login pageauth_bp.route(/register)def register(): return Register page在主应用中注册蓝图pythonfrom flask import Flaskfrom auth import auth_bpapp Flask(__name__)app.register_blueprint(auth_bp) # 注册蓝图if __name__ __main__: app.run(debugTrue)## 六、高级用法扩展与中间件### 6.1 使用 Flask-SQLAlchemy 操作数据库Flask 可以与 SQLAlchemy 集成操作关系型数据库。pythonfrom flask import Flaskfrom flask_sqlalchemy import SQLAlchemyapp Flask(__name__)app.config[SQLALCHEMY_DATABASE_URI] sqlite:///users.db # 使用 SQLitedb SQLAlchemy(app)# 定义模型class User(db.Model): id db.Column(db.Integer, primary_keyTrue) username db.Column(db.String(80), uniqueTrue, nullableFalse) email db.Column(db.String(120), uniqueTrue, nullableFalse) def __repr__(self): return fUser {self.username}# 创建数据库表with app.app_context(): db.create_all()# 添加用户app.route(/add_user/username/email)def add_user(username, email): new_user User(usernameusername, emailemail) db.session.add(new_user) db.session.commit() return fAdded {username}if __name__ __main__: app.run(debugTrue)### 6.2 使用 before_request 和 after_request这些钩子可以在请求处理前后执行代码类似于中间件。pythonapp.before_requestdef before_request(): print(fRequest to {request.path} received)app.after_requestdef after_request(response): print(fResponse status: {response.status_code}) return response## 七、部署与最佳实践### 7.1 生产环境配置生产环境应关闭调试模式使用环境变量管理配置。pythonimport osapp.config[SECRET_KEY] os.environ.get(SECRET_KEY, fallback-key)app.run(host0.0.0.0, port5000, debugFalse) # 监听所有 IP### 7.2 使用 Gunicorn 部署bash# 安装 Gunicornpip install gunicorn# 启动服务gunicorn -w 4 -b 0.0.0.0:8000 app:app## 总结Flask 的核心知识点可以概括为1.路由与视图函数用app.route()定义 URL 到函数的映射。2.模板引擎Jinja2 让 HTML 与 Python 数据分离。3.请求与响应request和response对象处理 HTTP 交互。4.会话与 Cookies管理用户状态。5.蓝图与扩展模块化开发和生态工具如 SQLAlchemy。6.部署生产环境使用 Gunicorn 等服务器。Flask 的轻量特性使其适合快速原型开发但通过扩展也能支持大型应用。掌握这些核心知识点你就能开始构建自己的 Web 应用了。记得多动手实践尝试结合前端框架如 Vue.js或数据库逐步提升项目复杂度。