一、什么是Flask?¶
Web框架就像是建筑中的“预制构件”,能帮我们快速搭建网页应用,不用从零开始写所有代码。Flask是一个用Python编写的轻量级Web框架,它的设计理念是“微”(Micro)——轻量、灵活,只提供最核心的功能,其他复杂功能可以通过扩展(Extensions)实现。
简单来说,Flask就像一个空的房子框架,你可以根据需要添加墙壁(路由)、门窗(功能),但基础结构已经帮你搭好了,让你专注于写网页的业务逻辑。
二、为什么选择Flask?¶
- 轻量灵活:没有太多内置功能,你可以自由选择需要的组件,比如想写博客就加个ORM,想做用户认证就加个登录插件。
- 学习成本低:核心概念简单,语法简洁,适合新手入门Web开发。
- 扩展性强:虽然轻量,但有丰富的第三方扩展(如Flask-SQLAlchemy、Flask-Login等),能满足复杂项目需求。
- 文档友好:官方文档清晰易懂,社区活跃,遇到问题容易找到解决方案。
三、核心概念详解¶
1. 路由(Route):URL与函数的桥梁¶
路由就像地图上的路标,告诉Flask“哪个URL对应哪个功能”。用装饰器@app.route()定义:
@app.route('/') # 定义根目录URL
def index(): # 视图函数,处理URL请求
return "Hello, Flask!" # 返回页面内容
- 装饰器:Python的装饰器是“语法糖”,给函数加上
@app.route('/')后,Flask会知道这个函数要处理根路径/的请求。 - 路由变量:可以动态捕获URL参数,比如用户页面:
@app.route('/user/<username>') # <username>是动态参数
def user_profile(username):
return f"Hello, {username}!" # 直接用参数拼接内容
2. 视图函数(View Function):处理请求的核心¶
视图函数是路由指向的“处理函数”,负责接收请求、处理数据、返回响应。比如:
@app.route('/greet')
def greet():
name = "Flask"
return f"<h1>Hello, {name}!</h1>" # 返回HTML内容
- 返回内容:可以直接返回字符串(含HTML标签)、JSON(用
jsonify())或渲染模板(用render_template())。
3. 请求与响应(Request & Response)¶
- 请求对象(Request):从客户端(浏览器)获取数据,比如用户输入的表单、URL参数等。需要导入
request:
from flask import request
@app.route('/search', methods=['GET', 'POST'])
def search():
if request.method == 'POST': # 判断请求类型(GET/POST)
keyword = request.form.get('keyword') # 获取表单数据
return f"搜索关键词:{keyword}"
else: # GET请求
return "请输入关键词"
- 响应对象(Response):给客户端返回数据,最简单的是用
return,还可以自定义状态码:
return "Not Found", 404 # 返回404错误
4. 模板(Templates):动态生成页面¶
直接返回HTML字符串不灵活,模板引擎(Flask默认用Jinja2)能帮我们更高效地渲染页面。步骤:
1. 在项目根目录创建templates文件夹(必须命名为templates)。
2. 在templates里新建index.html:
<!DOCTYPE html>
<html>
<body>
<h1>Hello, {{ name }}!</h1> <!-- Jinja2变量渲染 -->
{% if age > 18 %}
<p>成年人</p>
{% else %}
<p>未成年人</p>
{% endif %}
</body>
</html>
- 在视图函数中渲染模板:
from flask import render_template
@app.route('/template')
def use_template():
data = {
"name": "Flask",
"age": 20
}
return render_template('index.html', **data) # 传递数据给模板
5. 静态文件(Static Files):CSS、JS、图片等¶
静态文件(如样式表、图片、JavaScript)放在项目根目录的static文件夹中。通过url_for('static', filename='xxx')引用:
<!-- 在模板中引用CSS -->
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
<!-- 引用图片 -->
<img src="{{ url_for('static', filename='logo.png') }}">
6. 扩展(Extensions):让功能更强大¶
Flask本身功能简单,但扩展能帮你快速实现复杂需求,比如:
- Flask-SQLAlchemy:操作数据库的ORM工具,不用写原生SQL。
- Flask-Login:实现用户登录、注销、会话管理。
- Flask-WTF:处理表单验证(防重复提交、数据校验)。
四、基础应用实战:从0到1写一个简单网站¶
1. 最小示例:第一个Flask应用¶
创建一个app.py文件(项目根目录):
from flask import Flask
# 初始化Flask应用,__name__是当前模块名
app = Flask(__name__)
# 定义路由和视图函数
@app.route('/')
def home():
return "欢迎来到Flask小站!<a href='/about'>关于我们</a>"
@app.route('/about')
def about():
return "这是一个用Flask写的简单示例网站。"
# 启动应用(仅在直接运行时生效)
if __name__ == '__main__':
app.run(debug=True, port=5000) # debug=True:代码修改自动重启
运行方式:在终端执行python app.py,打开浏览器访问http://localhost:5000,就能看到“欢迎来到Flask小站!”页面。
2. 扩展功能:添加模板和静态文件¶
(1)创建项目结构¶
my_flask_app/
├── app.py # 主程序
├── templates/ # 模板文件夹
│ └── index.html # 首页模板
└── static/ # 静态文件文件夹
└── style.css # 样式表
(2)修改index.html模板:¶
<!DOCTYPE html>
<html>
<head>
<title>Flask小站</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<h1>Hello, Flask!</h1>
<p class="intro">这是一个轻量级Web框架的示例。</p>
<a href="/about">关于我们</a>
</body>
</html>
(3)修改style.css:¶
body {
font-family: Arial;
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
.intro {
color: #666;
}
(4)修改app.py:¶
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html') # 渲染templates/index.html
@app.route('/about')
def about():
return render_template('about.html') # 假设about.html也在templates里
if __name__ == '__main__':
app.run(debug=True)
现在重新运行app.py,就能看到带样式的页面和超链接跳转了!
五、总结与学习建议¶
Flask的核心优势是“轻量+灵活”,适合从小项目起步,再逐步扩展功能。初学者可以先掌握基础的路由、视图、模板和静态文件,再学习扩展工具(如ORM、用户认证)。
学习资源推荐:
- 官方文档:flask.palletsprojects.com
- 入门教程:跟着官方的“快速入门”(Quickstart)写示例,边做边学
- 实践项目参考:尝试用Flask做一个简单博客、待办事项列表等
通过这篇文章,你已经了解了Flask的核心概念和基础应用。接下来,动手尝试修改示例代码,比如添加表单提交、用户参数动态渲染,就能更快掌握Web开发的基础技能啦!