Flask 框架基础介绍

1. Flask 安装

Flask 是一个轻量级的 Python Web 框架,安装非常简单。可以使用 pip 命令进行安装:

bash 复制代码
pip install flask

安装后,可以在 Python 脚本中导入 Flask 模块,开始使用 Flask 创建 Web 应用。

2. Flask 创建应用

Flask 应用的创建相当简单,只需要实例化一个 Flask 对象。Flask 类接收一个参数,通常是 __name__,表示当前 Python 文件的模块名。应用实例可以设置一些配置,例如数据库、日志等。

python 复制代码
from flask import Flask

app = Flask(__name__) # 创建 Flask 应用实例

然后通过 @app.route() 装饰器来定义 URL 路由,并将请求的 URL 路径与视图函数进行映射。例如:

python 复制代码
@app.route('/')

def hello_world():

    return 'Hello, World!'

这段代码的作用是,当用户访问根路径 / 时,会调用 hello_world() 函数,并返回一个简单的 "Hello, World!" 文本。

3. Flask 启动网站

启动 Flask 应用非常简单,只需要在代码最后调用 app.run() 方法:

python 复制代码
if __name__ == '__main__':

    app.run() # 启动服务器

app.run() 会启动 Flask 的内置开发服务器,默认在本地的 5000 端口运行。你可以通过浏览器访问 http://127.0.0.1:5000/ 来查看应用。

如果想改变默认端口或运行模式(开发模式、生产模式等),可以传递额外的参数:

python 复制代码
app.run(debug=True, host='0.0.0.0', port=8080)
  • debug=True:开启调试模式,允许自动重新加载代码,并显示详细的错误信息。

  • host='0.0.0.0':允许应用在外部网络访问(默认只能在本机访问)。

  • port=8080:设置自定义端口。

4. Flask 路由

Flask 路由的核心是将 URL 路径与视图函数进行绑定,用户请求的 URL 会被映射到指定的 Python 函数,称为视图函数。

例如:

python 复制代码
@app.route('/about')

def about():

    return 'This is the about page'

此时,当用户访问 /about 时,Flask 会执行 about() 函数并返回 "This is the about page"。

路由的动态部分

Flask 路由还支持动态 URL 部分。你可以在 URL 路径中加入变量部分,这些变量会作为参数传递给视图函数:

python 复制代码
@app.route('/user/<username>')

def show_user(username):

    return f'Hello, {username}!'

在这个例子中,<username> 是一个动态部分,表示匹配任何内容,Flask 会将这个内容传递给 show_user 函数。

支持 HTTP 方法

Flask 默认支持 GET 请求,但可以通过 methods 参数支持其他 HTTP 方法,如 POSTPUTDELETE 等。例如:

python 复制代码
@app.route('/submit', methods=['POST'])

def submit_form():

    return 'Form submitted'

5. Flask URI 重定向

Flask 提供了 redirect()url_for() 函数来进行 URL 重定向。redirect() 用于将用户的请求重定向到另一个 URL,url_for() 用于生成某个视图函数对应的 URL。

redirect() 示例:
python 复制代码
from flask import redirect, url_for

@app.route('/home')

def home():

    return redirect(url_for('about')) # 重定向到 about 视图
url_for() 示例:

url_for() 用于生成指定视图函数对应的 URL。例如:

python 复制代码
@app.route('/user/<username>')

def user_profile(username):

return f'User profile for {username}'

# 使用 url_for 生成 URL

url = url_for('user_profile', username='john')

# 生成的 URL: /user/john

6. Flask 模板

Flask 使用 Jinja2 模板引擎来渲染 HTML 页面。模板文件存储在 templates 目录下,可以在模板中使用变量、条件语句和循环等功能来动态生成内容。

创建模板

例如,创建一个 index.html 模板:

html 复制代码
<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Welcome</title>

</head>

<body>

    <h1>Hello, {{ name }}!</h1>

</body>

</html>
渲染模板

在视图函数中使用 render_template() 渲染模板,并传递变量到模板中:

python 复制代码
from flask import render_template

@app.route('/')

def home():

    return render_template('index.html', name='John')

此时,Flask 会将 name='John' 传递给模板,渲染后的 HTML 会显示 "Hello, John!"。

7. Flask-Request

Flask 提供了 request 对象,用于访问 HTTP 请求的各种信息。常用的 request 属性有:

  • request.method:请求方法(GETPOST 等)。

  • request.args:获取 URL 中的查询参数(GET 请求)。

  • request.form:获取提交的表单数据(POST 请求)。

  • request.files:获取上传的文件。

  • request.json:获取 JSON 格式的请求数据。

获取表单数据:
python 复制代码
@app.route('/submit', methods=['POST'])

def submit():

    username = request.form['username'] # 获取表单中的用户名字段

    return f'Hello, {username}!'
获取查询参数:
python 复制代码
@app.route('/search')

def search():

    query = request.args.get('q') # 获取 URL 查询字符串中的 q 参数

    return f'Searching for {query}'

8. Flask 蓝图(Blueprint)

Flask 蓝图是组织应用代码的一个重要特性,蓝图可以让你将应用的不同部分进行模块化,方便开发和管理。一个蓝图可以定义路由、视图函数等,并在主应用中注册。

创建蓝图:
python 复制代码
from flask import Blueprint

# 创建蓝图

user_bp = Blueprint('user', __name__)

@user_bp.route('/profile')

def profile():

    return 'User profile page'
注册蓝图:

在主应用中注册蓝图,并定义 URL 前缀:

python 复制代码
app.register_blueprint(user_bp, url_prefix='/user')

此时,访问 /user/profile 会调用 user_bp 中定义的 profile 视图函数。

蓝图的使用可以有效地将应用分成多个模块,特别适合于较大的 Web 应用。

相关推荐
苏近之17 小时前
Rust 基于 Tokio 实现任务管理器
后端·架构·rust
zzlyx9917 小时前
ASP.NET Core 依赖注入的三种服务生命周期的不同使用
后端·asp.net
踏浪无痕17 小时前
像挑选书籍一样挑选技术:略读、精读,还是直接跳过?
后端·程序员·架构
山沐与山17 小时前
【设计模式】Python仓储模式:从入门到实战
python·设计模式
MarkHD17 小时前
智能体在车联网中的应用:第25天 深度Q网络(DQN)实战:在CartPole环境中用PyTorch从零实现
人工智能·pytorch·python
源代码•宸17 小时前
goframe框架签到系统项目开发(用户认证、基于 JWT 实现认证、携带access token获取用户信息)
服务器·开发语言·网络·分布式·后端·golang·jwt
期待のcode17 小时前
static关键字
java·后端
麦麦大数据17 小时前
F059 vue+flask酒店对比系统
前端·vue.js·flask·携程·酒店对比·飞猪·同程
SimonKing17 小时前
Java汉字转拼音的四种方案,99%的开发场景都够用了!
java·后端·程序员