Python从入门到精通(第52章):Flask快速入门

张开发
2026/4/15 6:53:14 15 分钟阅读

分享文章

Python从入门到精通(第52章):Flask快速入门
开头导语Flask 是 Python Web 框架的"Hello World"。它小到几行代码就能跑起来,大到能支撑一个中型互联网应用。很多人学 Flask 的方式是找一个小项目跑起来,然后往里面堆代码——这种学法容易,但基础不扎实。本章从 Flask 的核心概念讲起:路由、视图函数、请求、响应、Blueprint,把每个知识点讲透,再动手写一个完整的 RESTful API。读完本章后,你能理解 Flask 的工作原理,而不是只会复制粘贴代码。章节摘要Flask 是 Python 轻量级 Web 框架,核心由 Werkzeug(WSGI 工具箱)和 Jinja2(模板引擎)组成。最小应用只需要几行代码:实例化 Flask、定义路由、编写视图函数。@app.route装饰器把 URL 绑定到函数,函数返回值就是响应内容。请求对象request封装了客户端请求的所有信息。Blueprint 把大型应用拆分成多个模块。app.run() 是开发服务器,生产环境用 gunicorn。关键词Flask、路由、视图函数、request、response、Blueprint、app.run、gunicorn、Jinja2学习目标理解 Flask 的请求-响应模型掌握路由定义和视图函数编写掌握 request 和 response 的用法能够用 Blueprint 组织大型应用理解开发服务器和生产服务器的区别先修知识HTTP 协议基础知识(第51章)Python 基础语法、装饰器环境准备pipinstallflask gunicornFlask 的请求-响应模型Flask 的工作流程极其简单:客户端发来请求 → Flask 调用对应视图函数 → 视图函数返回响应 → Flask 发回响应。这个模型的关键是路由:把 URL 映射到视图函数。比如用户访问http://example.com/user/1,Flask 找到@app.route('/user/int:user_id')对应的视图函数,把user_id=1传进去,视图函数处理后返回响应。最小 Flask 应用fromflaskimportFlask app=Flask(__name__)@app.route("/")defindex():return"h1Hello Flask/h1"@app.route("/about")defabout():return"p关于页面/p"if__name__=="__main__":app.run(debug=True,host="0.0.0.0",port=8000)运行后在浏览器访问http://localhost:8000/和http://localhost:8000/about就能看到页面。路由详解路由参数URL 中用type:name定义路径参数,Flask 会自动做类型转换:@app.route("/user/int:user_id")defget_user(user_id):"""获取用户信息,user_id 是整数"""return{"user_id":user_id,"name":"Ada"}@app.route("/post/slug")defget_post(slug):"""获取文章,slug 是字符串"""return{"slug":slug}@app.route("/date/int:year/int:month")defget_archive(year,month):"""按年月归档"""return{"year":year,"month":month}支持的类型转换器:转换器类型示例匹配string(默认)字符串(不含/)/user/adaint整数/user/123float浮点数/rate/3.14path路径(含/)/files/a/b/cuuidUUID/item/550e8400-...HTTP 方法路由默认只接受 GET 请求。用methods参数指定允许的方法:@app.route("/items",methods=["GET"])deflist_items():"""列表(查)"""return{"items":["A","B","C"]}@app.route("/items",methods=["POST"])defcreate_item():"""创建(增)"""data=request.get_json()return{"created":data},201@app.route("/items/int:item_id",methods=["PUT"])defupdate_item(item_id):"""更新(改)"""data=request.get_json()return{"updated":item_id,"data":data}@app.route("/items/int:item_id"

更多文章