文章目錄
- 基礎概念
- 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通過請求體傳輸,適合敏感數據。