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 应用。

相关推荐
棒棒的皮皮40 分钟前
【OpenCV】Python图像处理之位平面分解
图像处理·python·opencv·计算机视觉
网安老伯43 分钟前
计算机网络:网络安全(网络安全概述)
开发语言·数据库·python·计算机网络·web安全·网络安全·php
unclecss43 分钟前
从根儿上把接口加速 10 倍:Spring Boot 3 + 本地缓存「金字塔」实战
spring boot·后端·缓存·性能优化·caffe
卿雪1 小时前
MySQL【数据类型】:CHAR 和 VARCHAR 的对比、VATCHAR(n) 和 INT(n) 里的 n 一样吗?
android·java·数据库·python·mysql·adb·golang
cliffordl1 小时前
Web 自动化测试(Playwright)
前端·python
Q_Q5110082851 小时前
python+django/flask的在线预约导游系统
spring boot·python·django·flask·node.js
Q_Q5110082851 小时前
python+django/flask的流浪宠物领养系统
spring boot·python·django·flask·node.js·php
江上鹤.1481 小时前
元组和OS模块
开发语言·python
沧澜sincerely1 小时前
Spring Boot 后端实现 WebSocket
spring boot·后端·websocket