URL路径参数转换器
作用和基本使用
作用:
用于校验请求的路由参数中的值是否符合符合指定的规则。
这个使用方法和django中的路由参数转换器是差不多的。
至于为什么用路径参数转换器,原因和django中的一样,虽然你可以在视图函数中校验,但是如果有好几个视图函数都要用到相同的校验规则,此时使用路径参数转换器就很好的体现了面向对象的封装思想。
基本语法:<转换器名称:路径参数名>
基本使用实例:
@app.route('/users/<int:user_id>')
# 路由参数中写的是user_id,视图函数中就必须要有这个参数接收
def user_info(user_id):
print(type(user_id))
return f"{user_id=}"
# 或者直接将视图函数的参数定义成*args, **kwargs,然后再获取
@app.route('/users/<int:user_id>')
def user_info(*args, **kwargs):
user_id = kwargs.get("user_id")
print(type(user_id))
return f"{user_id=}"
flask中自带的转换器,分别为:
#: the default converter mapping for the map.
DEFAULT_CONVERTERS: t.Mapping[str, type[BaseConverter]] = {
"default": UnicodeConverter,
"string": UnicodeConverter,
"any": AnyConverter,
"path": PathConverter,
"int": IntegerConverter,
"float": FloatConverter,
"uuid": UUIDConverter,
}
自定义转换器
自带的路径参数转换器很多时候都无法完全满足我们的需求,比如我们要校验手机号...又是手机号,没错..
步骤与django大同小异,都是先编写转换器类,然后注册使用。
第一步:编写继承BaseConverter的转换器类,并编写正则。
(和django不一样的是,django不需要继承某个类)
from werkzeug.routing import BaseConverter
class MobileConverter(BaseConverter):
# 编写正则表达式
# 注意:不能写^来匹配开头,但是可以用$匹配结尾。这和django的转换器也是一样的。
regex = r"1[3-9]\d{9}$"
def __init__(self, map, *args, **kwargs):
# 重写init方法可以做一些更多的功能,比如int转化器,可以这样用<int(max=199):age>
# 这种方式就是在init中初始化的,具体直接看NumberConverter
super().__init__(map, *args, **kwargs)
# 这里可以根据需要决定是否重写to_python方法
# 然后可以实现更多的功能,具体也可以参考NumberConverter
# if self.fixed_digits and len(value) != self.fixed_digits:
# raise ValidationError()
# value = self.num_convert(value)
# if (self.min is not None and value < self.min) or (
# self.max is not None and value > self.max
# ):
# raise ValidationError()
# return value
def to_python(self, value: str):
# 父类默认是直接返回value
return super().to_python(value)
django转换器:
class PhoneNumberConverter:
regex = r'1[3-9]\d{9}'
# to_python的作用是返回给视图
def to_python(self, value):
return str(value)
# to_urls是一个反向解析用的(了解即可,不实现也可以)
# def to_url(self, value):
# return str(value)
第二步:注册转换器
flask中:
# 注册自定义转换器,需要先注册才能在路由中使用。
# mobile就是在url路径参数中使用的名称
app.url_map.converters["mobile"] = MobileConverter
django中:
# 注册转换器,需要在urlpatterns前面注册,因为你要先注册才能用呀
# 先导入注册函数
from django.urls.converters import register_converter
# register_converter(转换器类, 在路由urls中使用的名称)
register_converter(PhoneNumberConverter, "phonecheck")
URL路径参数转换器的更多相关文章
- Vue Router 获取url路径参数 query
https://router.vuejs.org/zh/api/#路由对象属性 $route.query 类型: Object 一个 key/value 对象,表示 URL 查询参数.例如,对于路径 ...
- 获取URL路径参数getUrlParams
function getUrlParams(){ var reg = new RegExp("(^|&)" + name + "=([^&]*)(& ...
- JS分页 + 获取MVC地址栏URL路径的最后参数
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...
- 将map中的查询参数拼装到URL路径中
被调接口的URL路径: //被调接口url String apiUrl = "http://api.open.xxxxxx.com/implatform/interview/send?acc ...
- CSS样式表、JS脚本加载顺序与SpringMVC在URL路径中传参数与SpringMVC 拦截器
CSS样式表和JS脚本加载顺序 Css样式表文件要在<head>中先加载,这样网页显示时可以第一次就渲染出正确的布局和样式,网页就不会闪烁,或跳变 JS脚本尽可能放在<body> ...
- SpringMvc路径参数和url的两种实现方式
我们经常采用的SpringMvc路径参数经常的操作是在url后面采用?参数名=值1&参数名2=值2这种方式实现 RequestMapping的作用: 1)当作用在controller时,我们通 ...
- 【API管理 APIM】APIM中如何配置使用URL路径的方式传递参数(如由test.htm?name=xxx 变为test\xxx)
问题描述 在默认的URL传递参数中,我们使用的是https://test01.azure-api.cn/echo/resource?param1=sample¶m2=testname这 ...
- FastAPI(4)- get 请求 - 路径参数 Path Parameters
什么是路径 假设一个 url 是: http://127.0.0.1:8080/items/abcd 那么路径 path 就是 /items/abcd 路径参数 就是将路径上的某一部分变成参数,可通过 ...
- JS-获取URL请求参数
前言:原来做过一个项目,需要实现一个页面打印的功能,由于项目中使用了AngularJS+Bootstrap等前端框架,需要打印的页面又在弹出框中,使用了Bootstrap的模态框后发现打印的效果不太好 ...
- java 截取url的参数
/** * 去掉url中的路径,留下请求参数部分 * @param strURL url地址 * @return url请求参数部分 * @author lzf */ private static S ...
随机推荐
- 基于velero及minio实现etcd数据备份与恢复
1.Velero简介 Velero 是vmware开源的一个云原生的灾难恢复和迁移工具,它本身也是开源的,采用Go语言编写,可以安全的备份.恢复和迁移Kubernetes集群资源数据:官网https: ...
- Codeforces 1257E - The Contest
题意 三个人,每个人有一些数字,组合起来是\(1\)-\(n\),每个人可以给另一个人一个拥有的数字,问最小操作数,使得第一个人拥有\(1\)-\(i\)的数,第二个人拥有\(i+1\)-\(j\)的 ...
- CodeForces 1187E Tree Painting
题意:给定一棵\(n\)个点的树 初始全是白点 要求你做\(n\)步操作,每一次选定一个与一个黑点相隔一条边的白点,将它染成黑点,然后获得该白点被染色前所在的白色联通块大小的权值. 第一次操作可以任意 ...
- 2022最新 Navicat Premium 16中文软件激活安装永久使用正版(支持MAC+win)
Navicat Premium 16中文正版永久使用,下载地址: 关注我的wx公众号"奋斗在IT"回复1015获取下载地址
- 2017-D
2017-D 数据库部分 使用Windows 身份验证登录SQL Server ,建立数据库test0322,文件日志保存到一个专门的文件夹 建表 备份数据库,选定所创建数据库,右键-任务-备份-选择 ...
- assembleDebug太慢的问题调查以及其他
Preface 最近在做flutter上的音频和视频方面的探索. 需要用到一些视屏区域截取,视屏导出成序列图等等. 这是昨天晚上到今天早上解决的一些问题的汇总,可能先后顺序之类的会记错: 此文目的用于 ...
- window 安装多个低版本chrome测试
最近在用next13做一个简单的项目,需要兼容chrome 60+以上版本,为了方便测试,特意在公司的台式机上安装了低版本. 这里简单记录下高版本覆盖低版本的问题,这个方法不影响Windows系统内已 ...
- Navicat连接MySQL,出现2059 - authentication plugin 'caching_sha2_password'的解决方法
cmd(管理员)登录mysql执行如下 ALTER USER 'YOURUSERNAME'@'localhost' IDENTIFIED WITH mysql_native_password BY ' ...
- Frog 3 题解
Frog 3 题目大意 题意都这么明确了还要这个干什么. 存在 \(n\) 个点,每个点有一个属性 \(h_i\),\(h_i\) 单增,从点 \(i\) 移动到点 \(j(j>i)\) 的代价 ...
- 监控Mysql数据库
Prometheus(普罗米修斯) 监控Mysql数据库: 这个是基于第一版本环境搭建的,需要部署prometheus: 服务器 IP地址 Prometheus服务器 192.168.1.22 被监控 ...