flask自定义转换器

flask作为轻型WEB框架,在web开发中,可能会出现限制用户访问的规则的场景,那么这个时候,就需要过滤指定用户,所以可以使用转换器实现。
转换器的本质是:通过正则表达式匹配路由地址
flask 系统自带的转换器有

DEFAULT_CONVERTERS = {
    ‘default‘:          UnicodeConverter,
    ‘string‘:           UnicodeConverter,
    ‘any‘:              AnyConverter,
    ‘path‘:             PathConverter,
    ‘int‘:              IntegerConverter,
    ‘float‘:            FloatConverter,
    ‘uuid‘:             UUIDConverter,
}

当我们自定义转换器的时候的有以下步骤:
导入转换器基类(BaseConverter):Flask中所有的路由的匹配规则,都是使用转换器实现
自定义转换器继承于转换器基类
添加转换器到默认的转换器字典中
使用自定义转换器实现自定义匹配规则

既然自定义转换器需要继承转换器基类(BaseConverter)那么我们看一下转换器基类的源码。

class BaseConverter(object):

    """Base class for all converters."""
    regex = ‘[^/]+‘
    weight = 100

    def __init__(self, map):
        self.map = map

    def to_python(self, value):
        return value

    def to_url(self, value):
        return url_quote(value, charset=self.map.charset)

  

自定义转换器代码

from flask import Flask
#导入基类转换器
from werkzeug.routing import BaseConverter

app = Flask(__name__)

# 1.自定义类,继承自BaseConverter
class MyRegexConverter(BaseConverter):

    # 2.编写初始化方法, init方法, 接收两个参数, url_map, regex, 并初始化父类空间和子类空间
    def __init__(self,url_map,regex):
        super(MyRegexConverter, self).__init__(url_map)
        self.regex = regex

# 3.将自定义转换器类,添加到默认的转换列表中
app.url_map.converters[‘re‘] = MyRegexConverter

#使用自定义转换器
#接收3位整数
@app.route(‘/<re("\d{3}"):num>‘)
def hello_world(num):

    print("num = %s"%num)

    return "the num is %s"%num

#接收一个手机号
@app.route(‘/<re("1[345678]\d{9}"):mobile>‘)
def get_phone_number(mobile):

    return "the mobile is %s"%mobile

if __name__ == ‘__main__‘:
    app.run()

  

自定义转换器匹配错误自动跳转网站首页

from flask import Flask
from flask import redirect
from flask import url_for
from werkzeug.routing import BaseConverter

app = Flask(__name__)

class MyConverter(BaseConverter):
    def __init__(self,url_map,regex):
        super(MyConverter, self).__init__(url_map)
        self.regex = regex
    def to_python(self, value):  # 匹配成功后被调用,可以对匹配到的参数进行处理,比如转换匹配到的数据的类型,在正则匹配完成之后,调用视图函数之前,可以对数据进行最后的处理
        return value
    def to_url(self, value):  # 在正则匹配之前调用执行,并传入参数,调用完成之后才开始真正的路由匹配,不关心是否匹配成功,可以通过此函数修正要传入路由中的参数,方便更好的正则匹配
        return value

app.url_map.converters[‘re‘] = MyConverter

@app.route(‘/<re("\d{3}"):num>‘)
def index(num):
    return num
@app.errorhandler(404)
def my_error(e):
    return redirect(url_for(‘jia‘))
@app.route(‘/jia‘)
def jia():
    return ‘jai‘

if __name__ == ‘__main__‘:
    app.run(debug=True)

  

原文地址:https://www.cnblogs.com/serpent/p/9575179.html

时间: 2024-10-09 13:30:22

flask自定义转换器的相关文章

Flask自定义转换器,实现路由匹配正则表达式参数

Flask框架动态路由实现参数传递和Django框架有类似之处,但是相比于Django框架,Flask实现复杂的参数就需要自己自定义转换器来实现了,而不能向Django那样直接使用正则表达式 1 # 路由传递的参数默认当做string处理 2 # 这里指定int,尖括号中冒号后面的内容是动态的 3 4 @app.route('/user/<int:id>') 5 def hello_itcast(id): 6 return 'hello itcast {}'.format(id) Flask默

flask url转换器,添加另类的url

import urllib from flask import Flask from werkzeug.routing import BaseConverter app = Flask(__name__) class ListConverter(BaseConverter): def __init__(self, url_map, separator="+"): super(ListConverter, self).__init__(url_map) self.separator =

SpringMVC 自定义转换器

实践SpringMVC转化器是遇到的问题:表单提交没有经过自定义转换器(解决:表单用post方式提交) 自定义转化器代码 package cn.liangqinghai.test; import org.springframework.core.convert.converter.Converter; import cn.liangqinghai.pojo.Student; public class MyConverter implements Converter<String, Student

自定义转换器 IValueConverter

如果要将值转换器与绑定关联,请创建一个实现 IValueConverter 接口的类,然后实现 Convert 和 ConvertBack 方法. 转换器可以将数据从一种类型更改为另一种类型,根据区域性信息转换数据,或修改表示形式的其他方面. 有关某些典型的转换器方案示例,请参见数据绑定概述中的“数据转换”. 值转换器是分区域性的. Convert 和 ConvertBack 方法都具有指示区域性信息的 culture 参数. 如果区域性信息与转换无关,那么在自定义转换器中可以忽略该参数.Con

struts2自定义转换器

Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用date类型是可以接收到的,但是如果传的是20101112这样类型的字符串,用date类型是获取不到,并且会出现错误的,struts2提供了一种类型转换器供我们使用. 以下为局部类型转换器的开发步骤 a.首先要写一个类来继承StrutsTypeConverter b.然后覆盖convertFromSt

spring mvc 自定义转换器

<!-- 注册转化器 --> <mvc:annotation-driven conversion-service="conversionService" /> <!-- 自定义转换器 --> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> &l

一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字段的删除过程中需不需要对数据进行备份 ''' 二.路由基础 ''' # url中含有四个参数 # url(regex, view, kwargs=None, name=None) # 正则路径 视图函数地址 默认关键字参数(了解) 路由别名 # r'index' 只要请求中含有index都可以匹配成

给萌新的 TS custom transformer plugin 教程——TypeScript 自定义转换器插件

xuld/原创 Custom transformer (自定义转换器)是干什么的 简单说,TypeScript 可以将 TS 源码编译成 JS 代码,自定义转换器插件则可以让你定制生成的代码.比如删掉代码里的注释.改变变量的名字.将类转换为函数等等. TypeScript 将 TS 代码编译到 JS 的功能,其实也是通过内置的转换器实现的,从 TS 2.3 开始,TS 将此功能开放,允许开发者编写自定义的转换器. 预备知识 语法树 语法树是用于表示语法的数据结构.具体请参考我的另一个篇文章:ht

走进Struts2(四)— 自定义转换器

尽管Struts2提供的内建类型转换器能满足绝大多数的需求,但是,有的时候还是需要使用自定义类型转换器来实现特定的需求.因为Struts2不能自动完成 字符串 到 引用类型 的 转换 需求:实现指定格式的日期转换 yyyy-MM-dd 1.准备 UserAcrion2类 @SuppressWarnings("serial") public class UserAction2 extends ActionSupport{ private String name; private Inte