初识Flask
字数 1182 2025-08-11 21:26:16
Flask Web框架全面教程
1. Flask简介
Flask是Python上的一个轻量级Web应用程序框架,被称为"微框架"。它旨在保持核心简单且可扩展,没有内置的数据库抽象层或表单验证支持,但支持通过扩展添加这些功能。
Flask基于两个核心组件:
- Werkzeug:WSGI工具包,实现请求、响应对象和实用函数
- Jinja2:Python的流行模板引擎,用于动态网页生成
2. 安装与项目结构
安装Flask
pip3 install flask
安装时会自动安装依赖项Werkzeug和Jinja2
项目基本结构
项目名/
├── static/ # 静态文件
├── templates/ # 模板文件
└── app.py # 主程序文件
3. 基本Flask程序
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World'
if __name__ == '__main__':
app.run()
app.run参数详解
app.run(host='127.0.0.1', port=8080, debug=True, load_dotenv=True)
host:默认127.0.0.1(仅本机访问),设为0.0.0.0可外部访问port:Web服务器端口,默认5000debug:调试模式,代码变更自动重载服务器load_dotenv:加载.env和.flaskenv环境变量文件
4. 调试模式
# 方法1
app.debug = True
app.run()
# 方法2
app.run(debug=True)
5. 配置管理
配置方法
# 方法1(不推荐)
app.debug = True
# 方法2(字典形式)
app.config["DEBUG"] = True
# 方法3(配置文件)
app.config.from_pyfile('settings.py')
# 方法4(推荐:类配置)
app.config.from_object("setobj.settings")
常见配置项
{
'ENV': 'production', # 环境:production/development/testing
'DEBUG': False,
'TESTING': False,
'SECRET_KEY': None,
# ...其他配置
}
6. 路由系统
基本路由
@app.route('/')
def index():
return 'Home Page'
@app.route('/about')
def about():
return 'About Page'
等价于底层实现
def user():
return 'User Page'
app.add_url_rule('/user', view_func=user)
变量规则
@app.route('/user/<username>')
def show_user(username):
return f'User: {username}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f'Post: {post_id}'
转换器类型
<int:var>:整型<float:var>:浮点型<string:var>:字符串(默认)<path:var>:路径<uuid:var>:UUID格式<any(val1,val2):var>:备选值
URL尾斜杠行为
/path/:访问/path会自动重定向到/path//path:访问/path/会返回404错误
7. 请求与响应
请求对象
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return 'POST请求'
else:
return 'GET请求'
获取请求参数
# GET请求参数
username = request.args.get('username')
# POST表单数据
username = request.form['username']
响应类型
# 字符串
return 'Hello'
# 字典(自动转为JSON)
return {'key': 'value'}
# 元组
return 'Hello', 200, {'Header': 'Value'}
# 响应对象
from flask import Response
return Response('<h1>Hello</h1>', status=200)
make_response
from flask import make_response
@app.route('/')
def index():
resp = make_response('Hello', 200)
resp.headers['X-Something'] = 'Value'
return resp
8. 重定向与URL构造
from flask import redirect, url_for
@app.route('/')
def index():
return redirect(url_for('login'))
@app.route('/login')
def login():
return 'Login Page'
9. 模板渲染
基本模板渲染
from flask import render_template
@app.route('/')
def index():
return render_template('index.html', name='John')
模板文件结构
templates/
└── index.html
多参数传递
@app.route('/')
def index():
context = {
'name': 'John',
'age': 25
}
return render_template('index.html', **context)
字符串渲染
from flask import render_template_string
@app.route('/')
def index():
return render_template_string('<h1>Hello {{ name }}</h1>', name='John')
10. Jinja2模板语法
变量输出
<p>{{ variable }}</p>
控制结构
{% if user %}
<p>Hello {{ user }}</p>
{% else %}
<p>Please login</p>
{% endif %}
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
循环变量
loop.index:当前迭代索引(从1开始)loop.index0:当前迭代索引(从0开始)loop.first:是否为第一次迭代loop.last:是否为最后一次迭代loop.length:序列长度loop.revindex:反向索引(从1结束)loop.revindex0:反向索引(从0结束)
11. 过滤器
常用过滤器
{{ name|upper }} <!-- 大写 -->
{{ name|lower }} <!-- 小写 -->
{{ name|title }} <!-- 首字母大写 -->
{{ text|truncate(30) }} <!-- 截断 -->
{{ html|safe }} <!-- 禁用转义 -->
{{ list|join(', ') }} <!-- 连接 -->
{{ num|round(2) }} <!-- 四舍五入 -->
自定义过滤器
# 方法1:add_template_filter
def replace_script(value):
return value.replace('script', '')
app.add_template_filter(replace_script, 'replace')
# 方法2:装饰器
@app.template_filter('replace')
def replace_script(value):
return value.replace('script', '')
12. 模板全局变量
config:当前配置对象request:当前请求对象session:当前会话对象g:请求绑定的全局变量url_for():URL构造函数get_flashed_messages():获取闪现消息
13. 最佳实践
- 使用蓝图组织大型应用
- 生产环境关闭调试模式
- 使用环境变量管理敏感配置
- 合理使用模板继承减少重复代码
- 对用户输入进行验证和转义
- 使用工厂模式创建应用
通过本教程,您已经掌握了Flask框架的核心概念和基本用法,可以开始构建自己的Web应用程序了。