文章目录
-
- 基础概念
-
- 1. 什么是Flask?其核心特性是什么?
- 2. Flask和Django的主要区别?
- 3. 解释Flask中的“路由”概念。如何定义动态路由?
- 核心组件
-
- 4. Flask的请求上下文(Request Context)和应用上下文(Application Context)有什么区别?
- 5. 如何访问请求参数?POST和GET方法的区别?
- 6. Jinja2模板引擎的作用是什么?如何传递变量到模板?
- 扩展与中间件
-
- 7. 列举Flask常用扩展及其作用。
- 8. 如何实现Flask应用的数据库迁移?
- 9. 什么是Flask的“蓝图”(Blueprint)?如何用它组织代码?
- 进阶应用
-
- 10. 如何实现Flask应用的异步任务?
- 11. 解释Flask的“钩子函数”(如before_request)。
- 12. **如何处理跨域请求(CORS)?**
- 安全与部署
-
- 13. 如何防范CSRF攻击?
- 14. Flask应用部署的常用方式?
- 15. 如何优化Flask应用的性能?
- 其他问题
-
- 16. 解释Flask中的“信号”(Signals)机制。
- 17. 如何实现Flask应用的单元测试?
- 18. Flask的调试模式有什么风险?如何避免?
基础概念
1. 什么是Flask?其核心特性是什么?
- Flask是一个轻量级WSGI Web框架,核心特性包括内置开发服务器、路由系统、Jinja2模板引擎、基于Werkzeug的WSGI工具集,以及通过扩展实现功能模块化。
2. Flask和Django的主要区别?
- Django是“全栈式”框架,自带ORM、Admin等功能;Flask更轻量,需通过扩展(如Flask-SQLAlchemy)实现同类功能,适合小型项目或需高度定制的场景。
3. 解释Flask中的“路由”概念。如何定义动态路由?
- 路由将URL映射到处理函数。动态路由通过
<variable>
定义,例如:
@app.route('/user/<username>')
def show_user(username):
return f'User: {
username}'
核心组件
4. Flask的请求上下文(Request Context)和应用上下文(Application Context)有什么区别?
- 请求上下文封装了请求相关信息(如
request
对象),而应用上下文封装了应用全局状态(如current_app
)。请求上下文生命周期短,应用上下文随应用启动而存在。
5. 如何访问请求参数?POST和GET方法的区别?
- 通过
request.args
获取GET参数,request.form
获取POST参数。GET参数在URL中可见,POST通过请求体传输,适合敏感数据。