有关flask路由app.route,路由参数的各种用法解析【非常全面】

这篇具有很好参考价值的文章主要介绍了有关flask路由app.route,路由参数的各种用法解析【非常全面】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,面试宝典等分享。

所属的专栏:flask框架零基础,进阶应用实战教学
景天的主页:景天科技苑

flask路由

1.路由的基本定义

什么是路由?

路由就是一种映射关系。是绑定应用程序(视图)和url地址的一种一对一的映射关系!
我们在开发过程中,编写项目时所使用的路由往往是指代了框架/项目中用于完成路由功能的类,这个类一般就是路由类,简称路由。

路由和视图的名称必须全局唯一,不能出现重复,否则报错。
路由重复,走先声明的,视图函数重复直接报错。

代码示例:

# 1. 导入flask核心类
from flask import Flask

# 2. 初始化web应用程序的实例对象
app = Flask(__name__)

# 开启debug模式
app.config["DEBUG"] = True

# 参数1:rule设置当前视图的路由地址
# 参数2:methods,设置当前视图的HTTP请求方法,允许一个或多个方法,不区分大小写,如果使用非设置的请求方法来访问,会报405错误
@app.route(rule="/", methods=["get", "post"])
def index():
    return "<h1>hello flask1</h1>"

if __name__ == '__main__':
    # 3. 运行flask提供的测试web服务器程序
    app.run(host="0.0.0.0", port=5000)

如下,使用非指定请求方法来访问,会报错
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

使用postman来使用post请求
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

使用get请求测试,可以正常拿到响应数据
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

2.路由参数接收方式

flask中,url可以传递路由参数,有2种方式:

路由参数就是url路径的一部分。

1.接收任意路由参数

# 1. 导入flask核心类
from flask import Flask

# 2. 初始化web应用程序的实例对象
app = Flask(__name__)

# 开启debug模式
app.config["DEBUG"] = True

@app.route(rule="/", methods=["get", "post"])
def index():
    return "<h1>hello flask1</h1>"

"""
路由参数的传递
尖括号圈住,里面写上参数变量名
在视图中即可通过参数列表按命名来接收
接收参数时,如果没有在设置路由中设置参数的类型,则默认参数类型为字符串类型
"""
@app.route("/goods/<cid>/<gid>")
def goods(gid, cid):
    print(gid, type(gid))
    print(cid, type(cid))
    return f"显示cid={cid},gid={gid}的商品信息"

if __name__ == '__main__':
    # 3. 运行flask提供的测试web服务器程序
    app.run(host="0.0.0.0", port=5000)

浏览器访问,拿到url输入的数据
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

2.接收限定类型参数

限定路由参数的类型,flask系统自带转换器编写在werkzeug/routing/converters.py文件中。底部可以看到以下字典:
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

在这个文件的最后配置
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

# converters用于对路由中的参数进行格式转换与类型限定的
 t.Mapping[str, t.Type[BaseConverter]是为了告诉读者,里面数据左边是个字符串,右边是数据类型
python3.6新增了一个typing模块,让我们在编写python代码的变量时,可以同时设置变量的数据类型

DEFAULT_CONVERTERS: t.Mapping[str, t.Type[BaseConverter]] = {
    "default": UnicodeConverter, # 默认类型,也就是string
    "string": UnicodeConverter, # 字符串,不包含 /
    "any": AnyConverter,    # 任意类型
    "path": PathConverter,  # 也是字符串,但是包含了 /
    "int": IntegerConverter,
    "float": FloatConverter,
    "uuid": UUIDConverter,
}

系统自带的转换器具体使用方式在每种转换器的注释代码中有写,请留意每种转换器初始化的参数。
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

代码:

# 1. 导入flask核心类
from flask import Flask

# 2. 初始化web应用程序的实例对象
app = Flask(__name__)

# 开启debug模式
app.config["DEBUG"] = True

@app.route(rule="/", methods=["get", "post"])
def index():
    return "<h1>hello flask1</h1>"

"""
通过路由转换器来对路由参数显示格式转换和限制类型
"""
@app.route("/goods/<float:cid>/<uuid:gid>")
def goods(gid, cid):
    print(gid, type(gid))
    print(cid, type(cid))
    return f"显示cid={cid},gid={gid}的商品信息"

if __name__ == '__main__':
    # 3. 运行flask提供的测试web服务器程序
    app.run(host="0.0.0.0", port=5000)

此时对于传入非指定类型的参数,则会报404错误
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

传指定类型参数,才能正常访问
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

3.自定义路由参数转换器

也叫正则匹配路由参数.

在 web 开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要用到正则匹配,根据自己的规则去限定请求参数再进行访问

具体实现步骤为:

  • 导入转换器基类BaseConverter:在 Flask 中,所有的路由的匹配规则都是使用转换器对象进行记录
  • 自定义转换器:自定义类继承于转换器基类BaseConverter
  • 添加转换器到默认的转换器字典DEFAULT_CONVERTERS中
  • 使用自定义转换器实现自定义匹配规则

代码实现

# 1. 导入flask核心类
from flask import Flask

# 2. 初始化web应用程序的实例对象
app = Flask(__name__)

# 开启debug模式
app.config["DEBUG"] = True

"""
自定义路由转换[在实际项目开发中,我们会单独准备一个python文件来保存转换器的定义代码]
"""
from werkzeug.routing.converters import BaseConverter

#在我们自定义的类里面写正则规则,并要继承BaseConverter
class MobileConverter(BaseConverter):
    """手机号参数类型的转换器"""
    regex = r"1[3-9]\d{9}"


# 把自定义路由转换器类注册到flask项目中,中括号里面的参数我们下面路由转换器类要用到
app.url_map.converters["mob"] = MobileConverter


@app.route("/sms/<mob:mobile>")
def sms(mobile):
    return f"发送短信给手机号:{mobile}的用户"

if __name__ == '__main__':
    # 3. 运行flask提供的测试web服务器程序
    app.run(host="0.0.0.0", port=5000)

运行程序访问,但凡不满足正则规则的请求,都无法正常访问
手机号太短
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

包含非数字
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

满足正则要求的手机号,可以正常访问
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

但是这样,我们写个类就把正则规则定死了,不方便其他路由调用
因此,我们需要优化,我们需要根据实际需要的正则来分别自定义
此时,我们需要将正则作为参数传进去

  • 导入转换器基类
    from werkzeug.routing.converters import BaseConverter

  • 自定义转换器
    先看下父类
    有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

class RegexConverter(BaseConverter):
    def __init__(self, map, *args, **kwargs):
        super().__init__(map, *args, **kwargs)  #我们不用进行类型限定
        self.regex = args[0]




- 添加转换器到默认的转换器字典中,并指定转换器使用时名字为: re
app.url_map.converters["re"] = RegexConverter


- 使用转换器去实现自定义匹配规则,当前此处定义的规则是:手机号码 

"""
自定义路由转换[在实际项目开发中,我们会单独准备一个python文件来保存转换器的定义代码]
"""
from werkzeug.routing.converters import BaseConverter

class RegexConverter(BaseConverter):
    def __init__(self, map, *args, **kwargs):
        super().__init__(map, *args, **kwargs)
        self.regex = args[0]

app.url_map.converters["re"] = RegexConverter

@app.route("/sms/<re('1[3-9]\d{9}'):mobile>")
def sms(mobile):
    return f"发送短信给手机号:{mobile}的用户"

@app.route("/goods/<re('\d+'):id>")
def goods(id):
    return f"显示商品id={id}的信息"

完整代码,包含各种注释解释:

# 1. 导入flask核心类
from flask import Flask

# 2. 初始化web应用程序的实例对象
app = Flask(__name__)

# 开启debug模式
app.config["DEBUG"] = True

"""
自定义路由转换[在实际项目开发中,我们会单独准备一个python文件来保存转换器的定义代码]
"""
from werkzeug.routing.converters import BaseConverter

#注意,自定义的类需要继承BaseConverter,并且要重载父类初始化方法,初始化父类,接收re的参数
class RegexConverter(BaseConverter):
    def __init__(self, map, *args, **kwargs):
        super().__init__(map, *args, **kwargs)
        self.regex = args[0]

#中括号里面的值 re,就是我们在路由定义转换器类时需要调用的
app.url_map.converters["re"] = RegexConverter   #这个就是我们自定义的类

@app.route("/sms/<re('1[3-9]\d{9}'):mobile>")  #这样,每次路由在参数正则定义式,就作为参数传给我们定义的类
def sms(mobile):
    return f"发送短信给手机号:{mobile}的用户"


@app.route("/goods/<re('\d+'):id>")  #此时传的是id的正则,只限制数字
def goods(id):
    return f"显示商品id={id}的信息"

if __name__ == '__main__':
    # 3. 运行flask提供的测试web服务器程序
    app.run(host="0.0.0.0", port=5000)

如果我们随便输入参数,则访问不到
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

输入正确的手机号可以访问到
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route

发送正确的商品id,也可以访问到
有关flask路由app.route,路由参数的各种用法解析【非常全面】,flask框架零基础,进阶应用实战教学,flask,python,后端,路由参数,app.route文章来源地址https://www.toymoban.com/news/detail-841444.html

到了这里,关于有关flask路由app.route,路由参数的各种用法解析【非常全面】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • flask路由添加参数

    flask路由添加参数 在 Flask 中,可以通过两种方式在路由中添加参数:在路由字符串中直接指定参数,或者通过 request 对象从请求中获取参数。 在路由字符串中指定参数:可以将参数直接包含在路由字符串中。参数可以是字符串、整数、浮点数等类型。 在 Flask 中,如果你需要

    2024年02月15日
    浏览(36)
  • Midjourney AI绘画中文教程详解(完整版)模型、命令、参数与各种高级用法

    我有一种预感,您一下子看不完这篇内容,您得【收藏】一下,以便下次接着看~~ Midjourney AI绘画中文教程,Midjourney是一款2022年3月面世的AI绘画工具,创始人是David Holz。  只要输入想到的文字,就能通过人工智能产出相对应的图片,耗时只有大约一分钟,这个工具不仅能绘画

    2024年02月06日
    浏览(54)
  • 新手指南:流程图中各种图形的含义及用法解析

    我们经常在技术设计、沟通、业务演示等一些领域看到流程图,它也可以称为输入输出图。顾名思义,它是指一种简单的工作流程的具体步骤,比如包括一次会议的流程,以及一次生产制造的顺序和过程等。本文将为大家介绍流程图的含义和具体用途,教你如何正确使用流程

    2024年02月14日
    浏览(42)
  • deque用法深度解析,一篇文章弄懂deque容器各种操作

    🖱 博客主页:在下马农的碎碎念 ✍ 本文由在下马农原创,首发于CSDN 📆 首发时间:2022/01/11 📅 最近更新时间:2022/01/11 🤵 此马非凡马,房星本是星。向前敲瘦骨,犹自带铜声。 📇 系列文章目录: 暂无 🙏作者水平有限,如发现错误,请留言轰炸哦!万分感谢! 🤗码字不

    2023年04月24日
    浏览(51)
  • 有关MAP各种概念的训练

    1.故意把程序搞出来异常 分析34,  是因为这个根本没有使用,才导致的 2.  这个while放在方法里就不报错,  放在这里就报错,究其原因是因为没有放在方法里,不能把Clienterhandler写成方法,它必须是类,需要用,方法自己重写一个  经过测试,的确需要写在测试中  好了一点,但是出现

    2023年04月11日
    浏览(27)
  • 解决uni-app小程序获取路由及路由参数

    在uni-appH5端可以获得当前页面的路由及参数,但是小程序里面就开始报错: 代码: 在小程序中报的错误: 解决方案: Thank you for reading, your likes and favorites are the biggest motivation for my creation

    2024年02月11日
    浏览(51)
  • 【Linux 】getopts 可选参数_Bash技巧:介绍 getopts 内置命令解析选项参数的用法

    在 Linux bash shell 中,内置了一个 getopts 命令,可以处理以 ‘-’ 开头的选项参数。本篇文章通过多个实例详解 getopts 命令的用法。 getopts 命令简介 在 bash shell 上执行命令,常常会用到一些选项参数来指定不同的操作。例如 ls 命令的 -l、-a 选项等。 我们在编写 shell 脚本时,也

    2024年02月07日
    浏览(38)
  • 解析CSS中的new Color(200, 200, 200, 100) 参数用法及应用实例

            在前端开发中,颜色是一个至关重要的视觉元素,而在JavaScript和Web开发中创建和操作颜色时,我们经常需要用到 Color 对象。例如, new Color(200, 200, 200, 100) 就是一种表示颜色的方式,它来源于HTML5的Canvas API或者一些JavaScript库如jQuery UI等。这个构造函数接收四个参

    2024年04月22日
    浏览(38)
  • 详解Python的Flash框架的常用语句 app = Flask(__name__),为什要以全局变量__name__作为初始化参数?

    详解Python的Flash框架的常用语句: 这一语句创建了一个Flask应用程序对象。 Flask是一个基于Python的轻量级Web框架,用于构建Web应用程序。在使用Flask时,我们需要创建一个Flask应用程序对象,该对象将充当我们构建Web应用程序的核心。 在初始化名叫app的对象时,为什以要以特殊

    2024年02月07日
    浏览(56)
  • route、ip route添加删除路由表命令,路由表永久化设置

    学习linux笔记小实践一 route 与 ip route的使用 route 与 ip route www.baidu.com 14.119.104.189 add ps:gw、via指自己的网关地址 del default 在/etc/sysconfig/network-scripts/route-ens33配置文件中添加语句 或 以下方法: 1)在/etc/rc.local里添加 方法: route add -net 192.168.3.0/24 dev eth0 route add -net 192.168.2.0/2

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包