初识Python常用框架Flask
记得特别清楚,大概是前年冬天,公司楼下那个奶茶店还在装修,我加班到晚上九点多,手里拿着一份需求——做个简单的管理后台,领导说“别搞那么复杂,能跑就行”。当时我第一个想到的就是 Flask,因为轻巧,搭起来比 Django 要快得多。
Flask 是啥玩意儿
你要真让我一句话讲清楚,Flask 就是一个轻量级的 Python Web 框架。它不像 Django 一样自带 ORM、模板系统、后台管理那一套,而是“只给你最小核心”,剩下你自己挑扩展。就像你点外卖,Flask 只给你主食,什么配菜饮料都得你自己选。正因为这个,Flask 用起来很灵活,你想小而快就小而快,想堆成大型项目也能靠插件撑起来。
安装也很简单,当时我在公司电脑里直接:
pip install flask
然后没两分钟就能跑起来一个最小的 Web 服务。
Hello World 例子
我第一次跑 Flask 的“Hello World”,感觉比 Django 轻松太多了,代码就几行:
from flask import Flaskapp = Flask(__name__)
@app.route("/")
defhello():
return"Hello, Flask!"
if __name__ == "__main__":
app.run(debug=True)
跑起来以后,浏览器打开 http://127.0.0.1:5000,就能看到页面上写着“Hello, Flask!”。当时我还在群里发了个截图,说“这玩意比 Django 爽多了”,结果被我们组那个小李怼:“别得瑟,你等项目大了就知道了”。不过说实话,小项目真挺合适。
路由和视图
Flask 里最核心的两个概念就是“路由”和“视图函数”。你在 @app.route("/") 里定义路径,然后写一个函数去处理请求。比如我要搞个用户详情页面:
@app.route("/user/<name>")
defuser_profile(name):
returnf"欢迎你,{name}!"
然后访问 /user/张三,就会返回“欢迎你,张三!”。比起很多框架,Flask 的写法就很直白,哪怕不懂 Python 的人看两眼也大概能明白。
模板系统 Jinja2
不过纯写字符串肯定不行啊,前端页面得有点样式。Flask 默认集成了 Jinja2 模板引擎,这玩意儿语法跟 Django 的模板差不多。当时我就新建了个 templates/hello.html:
<!doctype html>
<html>
<head><title>Hello</title></head>
<body>
<h1>你好,{{ name }}!</h1>
</body>
</html>
然后 Python 里这么写:
from flask import render_template@app.route("/hello/<name>")
defhello_template(name):
return render_template("hello.html", name=name)
这样页面就能动态渲染了。特别简单,但又不失灵活性。
表单和请求处理
我记得那时候写个登录页面,前端表单提交给后端,Flask 这边用 request.form 就能拿到参数:
from flask import request@app.route("/login", methods=["GET", "POST"])
deflogin():
if request.method == "POST":
username = request.form.get("username")
password = request.form.get("password")
if username == "admin"and password == "123":
return"登录成功"
else:
return"账号或密码错误"
return'''
<form method="post">
用户名: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
'''
虽然简单粗暴,但小系统足够了。当时我就这么上线过一个原型,领导用着还挺满意。
Flask 扩展
这里要说一句,Flask 的威力其实在于各种扩展。比如:
Flask-SQLAlchemy:数据库 ORM,跟 Django 那套挺像。 Flask-WTF:表单处理,支持验证和 CSRF。 Flask-Login:用户认证和登录管理。 Flask-Migrate:数据库迁移工具。
我第一次用 Flask-SQLAlchemy 写个模型,代码差不多这样:
from flask_sqlalchemy import SQLAlchemyapp.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///test.db"
db = SQLAlchemy(app)
classUser(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
db.create_all()
运行之后,直接生成 SQLite 数据库,特别适合快速开发。
蓝图(Blueprint)
写着写着,项目就大了,一个文件全堆一起肯定乱。Flask 给你一个“蓝图”机制,可以把路由拆分。比如用户模块、订单模块分开写,然后在主应用里注册。我那会儿就这么拆过:
from flask import Blueprintuser_bp = Blueprint("user", __name__)
@user_bp.route("/profile")
defprofile():
return"用户资料页"
然后在 app.py 里:
app.register_blueprint(user_bp, url_prefix="/user")
这样 /user/profile 就能访问了。团队协作的时候,每人写自己的蓝图,最后拼在一起,省得冲突。
RESTful API
后来我们要做个移动端接口,Flask 写 API 也挺顺手的。比如返回 JSON:
from flask import jsonify@app.route("/api/user/<int:user_id>")
defget_user(user_id):
return jsonify({"id": user_id, "name": f"用户{user_id}"})
这就是一个最简单的 RESTful 风格接口。
部署和调试
开发环境下 app.run(debug=True) 就够了,但线上肯定不能这么跑。我第一次部署 Flask 项目,用的是 Gunicorn 配合 Nginx,差不多是这样:
gunicorn -w 4 -b 0.0.0.0:8000 app:app
这里 -w 4 表示四个 worker,性能就上来了。前面再挂个 Nginx 做反向代理,整个服务就比较稳定。
用 Flask 的真实感受
说实话,Flask 特别适合用来做原型、做一些小后台,或者 API 服务。轻快灵活,但缺点也明显:项目一旦大了,结构规划得不好就容易乱。像我们当时的后台,写到 1 万多行的时候,没人敢随便动,因为没有像 Django 那种“约束”,什么地方都能插逻辑。
不过 Flask 的学习成本低,生态又全,基本能覆盖日常需求。对新手特别友好,你写了几天就能跑出个像样的东西来。
如果你现在刚学 Python,想做个 Web 应用试试手,Flask 是一个非常好的选择。它简单直接,不会让你一开始就被一大堆“概念”压垮。同时,等你项目做大了,扩展和拆分架构的方式也都有。
我自己用 Flask 踩过坑,也尝过甜头。就像当时冬天写后台,喝着刚开业的奶茶店买的多肉葡萄,边调接口边骂娘,最后一上线,居然没出 bug,那一刻我是真心觉得,Flask 是个好兄弟。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领