首页 > 其他分享 >URL路径参数转换器

URL路径参数转换器

时间:2023-10-04 12:25:30浏览次数:41  
标签:URL self 路径 value django user 转换器 id

作用和基本使用

作用:

用于校验请求的路由参数中的值是否符合符合指定的规则。

这个使用方法和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,self,路径,value,django,user,转换器,id
From: https://www.cnblogs.com/juelian/p/17742116.html

相关文章

  • 获取url后面的参数
    方式一finalStringqueryString=request.getQueryString();System.out.println(queryString);//解码System.out.println(URLDecoder.decode(queryString,StandardCharsets.UTF_8));测试:pageSize=25&pageNum=1&sort%5B%27id%27%5D=desc&sort%5B%27name%27%5D=......
  • springMVC类型转换器
    Spring引入通用的数据类型转换系统,其定义了sPI接口和相应的运行时热行类型转换的API,提供无状态,强类型可以在任意类型之间进行类型转换,可以用于任向需要的地方(如SpEL、数据绑定等) 1.配置自定义类型转换服务 2.日期类型转换器 ......
  • Windows 一个很有点奇葩的路径问题
    在Windows上设置Path是很多项目都首先需要做的事情。最近不知道为什么Windows11遇到了一个奇葩的PATH不能识别问题。  如上图显示的M2%的这个路径,不知道为什么就突然识别不了了。解决办法解决办法就是使用上下移动的按钮把路径中的配置上下移动一下。  ......
  • 挑战程序设计竞赛 2.1章习题 POJ 3009 Curling 2.0
    https://vjudge.net/problem/POJ-3009在MM-21星球上,今年的奥运会之后,冰壶运动开始流行起来。但规则与我们的有些不同。冰壶比赛是在一块冰板上进行的,冰板上标有方形网眼。他们只使用一块石头。游戏的目的是用最少的步数将石头从起点引向终点。图1显示了游戏棋盘的一个示例......
  • 无涯教程-JavaScript - ENCODEURL函数
    描述ENCODEURL函数返回URL编码的字符串。语法ENCODEURL(text)争论Argument描述Required/OptionalTextAstringtobeURLencoded.Required适用性Excel2013,Excel2016Example参考链接https://www.learnfk.com/javascript/advanced-excel-statistical-encode......
  • VCS代码保护+SOC中的复位电路+verdi生成部分原理图+verdi查看delta cycle+自定义的原
    VCS代码保护在新思公司的一些vip的实现中,一些代码进行了加密,导致无法查看源码,加密的方法也是使用新思的工具VCS。在编译的命令行添加+protect选项,在代码前后加上编译指示,则生成对应的加密vp、svp文件,中间的部分被加密。https://blog.csdn.net/woodhorse007/article/details/524......
  • 【5.0】Fastapi路径参数和数据的解析验证
    【一】小项目构建【1】文档结构树projects├─coronavirus├─__init__.py ├─....py├─turtorial ├─__init__.py ├─chapter03.py ├......
  • 大华城市安防监控系统平台管理 attachment_downloadByUrlAtt.action 任意文件下载漏洞
    漏洞简介大华城市安防监控系统平台管理存在任意文件下载漏洞,攻击者通过漏洞可以下载服务器上的任意文件漏洞复现fofa语法:app="dahua-DSS"登录页面如下:POC:/portal/attachment_downloadByUrlAtt.action?filePath=file:///etc/passwdnuclei批量yaml文件id:dahua_DSS_attach......
  • springmvc 获取项目中的所有请求路径
    springboot/springmvc获取项目中的所有请求路径1.编写业务代码@Autowired privateWebApplicationContextapplicationContext;@GetMapping("/getAllURL") publicRestfulResultgetAllURL(){ //获取springmvc处理器映射器组件对象RequestMappingHandlerMapping无法......
  • 深入解析 curl:掌握命令行的网络传输利器
    当我们使用curl进行网络请求时,了解如何有效地使用参数是非常重要的。curl提供了许多参数,用于控制请求的行为和配置。在这篇博客文章中,我们将详细解释一些常用的curl参数,帮助你更好地理解如何利用这个强大的工具。什么是curl?curl是一个命令行工具,用于发送和接收数据,通常用于......