Flask框架路由与视图函数详解:参数、转换器及配置加载

Luna
Luna
发布时间:2026-10-13| 2人浏览过
原创

本文深入解析Flask框架中的路由映射与视图函数机制。涵盖Flask对象初始化参数、run方法调试模式,以及@app.route装饰器的多种用法,包括动态参数类型、自定义正则转换器实现、指定HTTP请求方法。同时详细讲解视图函数的返回值形式(响应体、状态码、JSON、重定向与反解析),异常处理机制(abort与errorhandler),以及从类、配置文件和环境变量加载配置的三种方式,帮助开发者掌握Flask核心功能。

本文通过具体实例详细解析Flask框架中路由与视图函数的核心用法,旨在为读者提供清晰的参考指南。

构建基础Flask应用程序


#1.导入Flask类
from flask import Flask
#2.创建Flask对象接收一个参数__name__,它会指向程序所在的包
app = Flask(__name__)
#3.装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
  return 'Hello World'
#4.Flask应用程序实例的run方法,启动WEB服务器
if __name__ == '__main__':
  app.run()

首先需了解Flask对象初始化时的关键参数设置。

参数 描述
name (必写)代表程序主函数__main__
static_folder 静态资源文件夹(默认static)
static_url_path 静态资源路径(默认/static)
template_folder 模板文件夹(默认templates)

其次,掌握app.run()方法中各参数的具体含义与配置方式。

参数 描述
ip IP地址
port 端口
debug 默认为False,更改为True可以不重启服务器进行服务器修改(ctrl+s保存即可), 并且报错后会有相应提示

其中debug参数默认值为False;若将其设为True,服务器在代码修改后无需重启即可生效(保存Ctrl+S即可),且在发生错误时会提供详细的错误提示。

路由与视图函数的映射机制

使用@app.route("/路径")装饰器可将特定URL路径映射到对应的视图函数。通过访问app.url_map属性,可以查看当前应用中所有已注册的路由及其对应的函数关系。

支持动态参数传递,语法格式为@app.route("/路径/<类型:变量名>"),允许在URL中嵌入可变部分。

Flask内置了多种常用的URL转换器类型,用于自动校验和转换URL参数。

类型 描述
int 整型
float 浮点型
path 字符串型

除了内置类型,开发者还可以根据需求定义自定义转换器。

实现自定义转换器的步骤如下: (1) 创建一个新类并继承BaseConverter基类; (2) 在该类中编写__init__初始化方法; (3) 在初始化方法中调用父类构造函数并保存子类所需的变量(如正则表达式规则); (4) 将该自定义转换器注册到Flask应用默认的转换器列表中,以便在路由中使用。

以下是一个具体的自定义转换器实现示例。


from flask import Flask
from werkzeug.routing import BaseConverter
#1.自定义类,继承自BaseConverter
class MyRegexConverter(BaseConverter):
  # 2.编写方法, init
  def __init__(self,map,regex):
    # 3.初始化, 父类, 子类变量
    super(MyRegexConverter, self).__init__(map)
    self.regex = regex
app = Flask(__name__)
# 4.将自定义转换器添加到,系统默认的转换列表中
app.url_map.converters["re"] = MyRegexConverter
print(app.url_map.converters)
# 接收三位整数
# 通过re调用的init方法, 参数1[默认]: app.url_map, 参数2: 自己定义的规则
@app.route('/<re("\d{3}"):number>')
def hello_world(number):
  return "the re number is %s"%number
# 接收四位整数
@app.route('/<re("\d{4}"):number>')
def get_four_number(number):
  return "the four number is %s"%number
# 接收手机号
@app.route('/<re("1[3456789]\d{9}"):mobile>')
def get_mobile_number(mobile):
  return "the mobile number is %s"%mobile
if __name__ == '__main__':
  app.run()

此外,可以在路由装饰器中通过methods参数明确指定允许访问该视图的HTTP请求方法。


@app.route("/路径",methods=["⽅式1","方式2"])

Flask支持多种HTTP请求方式,包括GET(默认)、POST、PUT和DELETE等。

视图函数的返回值决定了发送给客户端的响应内容,其形式可以多样化。

最简单的方式是直接返回响应体字符串。

此时返回值可以是一个元组,依次包含响应体内容、HTTP状态码以及响应头字典,分别设置返回内容、状态码及自定义响应头信息。


return "hello","666",{"name":"zhangsan"}

另一种方式是手动创建Response对象来构建响应。


response = make_response("响应体")
response.status = "状态码 状态码描述"
response.headers = {响应头键值对}
(response.headers["Content-Type"] = "application/json")
return response

若需返回JSON格式数据,可使用Flask提供的工具函数。


jsonify(dict)
jsonify(key=value,key2=value2)

对于页面跳转需求,可以使用重定向功能。

重定向通过redirect("路径")函数实现;而url_for("函数名", key=value)用于反解析,即根据视图函数名生成对应的URL地址。两者结合使用,可以在重定向时携带参数,实现更灵活的路由跳转。

以下是重定向与url_for配合使用的完整代码示例。


"""
url_for, 反解析,根据视图函数名称找到,视图函数的路径地址,可以携带参数
格式: url_for('函数名',key=value), 返回的是一个地址(字符串)
"""""
from flask import Flask,url_for,redirect
app = Flask(__name__)
# 京东, 代号111
@app.route('/jingdong')
def jingdong():
  #print(url_for("taobao")) #/taobao
  # print(url_for("taobao",token=111)) #/taobao/111
  response = redirect(url_for("taobao",token=111))
  return response
#易迅, 代号222
@app.route('/yixun')
def yixun():
  response = redirect(url_for("taobao",token=222))
  return response
@app.route('/other')
def other():
  response = redirect(url_for("taobao",token=888))
  return response
# 淘宝
@app.route('/taobao/<int:token>')
def taobao(token):
  #判断哪个平台过来的用户
  if(token == 111):
    return "欢迎京东用户,光临淘宝,给你打9折"
  elif(token == 222):
    return "欢迎易迅用户,光临淘宝,给你打5折"
  else:
    return "其他用户"
if __name__ == '__main__':
  app.run()

在Flask应用中,还可以对异常情况进行专门处理。

可以通过abort函数主动抛出HTTP异常。


abort(code)

abort函数接收一个参数code,该参数对应标准的HTTP错误状态码(如404、500等)。

另一种处理方式是使用@app.errorhandler(code)装饰器注册异常处理函数,当指定状态码的异常发生时,执行对应的处理逻辑。


code为HTTP错误状态码
@app.errorhandler(code)
def fun():
…

Flask应用的配置信息可以通过多种方式加载到app.config中。

第一种方式是从Python类中加载配置。

以下示例展示了如何从自定义配置类中加载配置信息。


class Config(object):
  #调试模式
  DEBUG=True
app.config.from_object(Config)

第二种方式是从外部配置文件中加载。

以下示例演示了如何从指定的配置文件中加载配置。


app.config.from_pyfile("config.ini")

第三种方式(了解即可)是从环境变量中加载配置。


app.config.from_envvar()

希望上述关于Flask框架路由和视图函数的解析,能对读者进行Python Web程序设计提供实质性帮助。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。