在家做衣服的网站,同国外做贸易的网站,北京住房和城乡建设部网站,企业宣传路由的基本定义
路由就是一种映射关系。是绑定应用程序#xff08;视图#xff09;和url地址的一种一对一的映射关系#xff01;在开发过程中#xff0c;编写项目时所使用的路由往往是指代了框架/项目中用于完成路由功能的类#xff0c;这个类一般就是路由类#xff0c;…路由的基本定义
路由就是一种映射关系。是绑定应用程序视图和url地址的一种一对一的映射关系在开发过程中编写项目时所使用的路由往往是指代了框架/项目中用于完成路由功能的类这个类一般就是路由类简称路由。
flask中url可以传递路由参数有2种方式
路由参数就是url路径的一部分。路由的名称必须全局唯一不能重复。
# 1. 导入flask核心类
from flask import Flask# 2. 初始化web应用程序的实例对象
app Flask(__name__)# 开启debug模式
app.config[DEBUG] True# 参数1rule设置当前视图的路由地址
# 参数2methods设置当前视图的HTTP请求方法允许一个或多个方法不区分大小写
app.route(rule/, methods[get, post])
def index():return h1hello flask1/h1if __name__ __main__:# 3. 运行flask提供的测试web服务器程序app.run(host0.0.0.0, port5000) 接收任意路由参数
# 1. 导入flask核心类
from flask import Flask# 2. 初始化web应用程序的实例对象
app Flask(__name__)# 开启debug模式
app.config[DEBUG] Trueapp.route(rule/, methods[get, post])
def index():return h1hello 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(host0.0.0.0, port5000) 接收限定类型参数
限定路由参数的类型flask系统自带转换器编写在werkzeug/routing/converters.py文件中。底部可以看到以下字典
# converters用于对路由中的参数进行格式转换与类型限定的
DEFAULT_CONVERTERS: t.Mapping[str, t.Type[BaseConverter]] {default: UnicodeConverter, # 默认类型也就是stringstring: UnicodeConverter, # 字符串不包含 /any: AnyConverter, # 任意类型path: PathConverter, # 也是字符串但是包含了 /int: IntegerConverter,float: FloatConverter,uuid: UUIDConverter,
}
系统自带的转换器具体使用方式在每种转换器的注释代码中有写请留意每种转换器初始化的参数
转换器名称描述string默认类型接受不带斜杠的任何文本int接受正整数float接受正浮点值path接收string但也接受斜线uuid接受UUID通用唯一识别码字符串 xxxx-xxxx-xxxxx-xxxxx
# 1. 导入flask核心类
from flask import Flask# 2. 初始化web应用程序的实例对象
app Flask(__name__)# 开启debug模式
app.config[DEBUG] Trueapp.route(rule/, methods[get, post])
def index():return h1hello 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(host0.0.0.0, port5000)
可以在终端获取uuid 没有输入正确的信息就是这样子的 自定义路由参数转换器
也叫正则匹配路由参数.
在 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#自定义转换器
class RegexConverter(BaseConverter):def __init__(self, map, *args, **kwargs):super().__init__(map, *args, **kwargs)self.regex args[0]#添加转换器到默认的转换器字典中并指定转换器使用时名字为: re
app.url_map.converters[re] RegexConverterapp.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}的信息if __name__ __main__:# 3. 运行flask提供的测试web服务器程序app.run(host0.0.0.0, port5000)
运行测试http://127.0.0.1:5000/sms/13012345671 如果访问的url不符合规则会提示找不到页面