5_自定义url路由转换器

自定义URL转换器

自定义URL转换器的方式:

  1. 必须实现一个类,继承自BaseConverter(werkzeug.routing.BaseConverter)。
  2. 在自定义的类中,重写regex,也就是这个变量的正则表达式。
  3. 将自定义的类,添加到app.url_map.converters上,如:
# 普通转换器
class MobileConverter(BaseConverter):
    regex = r'1[3-9]\d{9}'
app.url_map.converters['mobile'] = MobileConverter    # 添加mobile转换器,  添加了后, 则可以在url中使用 `mobile` 这个转换器了

@app.router('/<mobile:mobile>/')
def my_mobile(mobile):
    return '我的手机号码为: {}'.format(mobile)
# 自定义路由转换器
from flask import Flask
from werkzeug.routing import BaseConverter

app = Flask(__name__)
app.config.update(DEBUG=True)

# 1. 定义自己的转换器, 万能正则转换器
class RegexConverter(BaseConverter):
    """正则路由转换器"""
    def __init__(self, map, regex):
        super().__init__(map)
        # 将正则表达式的参数保存到对象的属性中, flask会去使用这个属性来进行路由的匹配
        self.regex = regex

# 2. 将自定义的转换器添加到Flask的应用中
app.url_map.converters['re'] = RegexConverter

@app.route('/send/<re(r"1[3-9]\d{9}"):mobile>/')   # 使用
def send_sms(mobile):
    return 'send sms to {}'.format(mobile)

# --------------------------
class MobileConverter(BaseConverter):
    """普通转换器, 专用于校验手机号码"""
    def __init__(self, map):
        super().__init__(map)   # 父类调用不调用,对这个我感觉没有影响
        self.regex = r'1[3-9]\d{9}'
app.url_map.converters['mobile'] = MobileConverter

@app.route('/<mobile:mobile>/')
def mobile(mobile):
    return 'moible: {}'.format(mobile)

if __name__ == "__main__":
    app.run(port=8000)

to_python的作用:

在转换器类中,实现to_python(self, value)方法,这个方法的返回值,将会传递到view视图函数中作为参数.

class ListConverter(BaseConverter):
    def to_python(self, value):
        # return value.split('+')
        return 'hello'

app.url_map.converters['list'] = ListConverter

@app.route('/posts/<list:boards>/')
def boards(boards):
    return '您提交的模块是: {}'.format(boards)

# 访问:http://127.0.0.1:8000/posts/a+b/
# 返回结果为: 您提交的模块是: hello  # 第二个 return 'hello'
### 返回结果为: 您提交的模块是: ['a', 'b']   # 第一个return value.split('+')

to_url 的作用:

在转换器类中,实现to_url(self, value)方法,这个方法的返回值,将会在调用url_for函数的时候生成符合要求的URL形式.

原文地址:https://www.cnblogs.com/nichengshishaonian/p/11631664.html

时间: 2024-10-19 08:04:02

5_自定义url路由转换器的相关文章

flask第十一篇——自定义url转换器

首先和大家说一下flask的组成,flask其实是werkzeug(路由和http处理)+SQLAlchemy(数据库)+Jinja2(模板)组成的,今天我们要看到的东西就是`werkzeug`里面的内容. 我们在代码里导入from werkzeug.routing import BaseConverter,然后进入BaseConverter中看一下这个方法的源码: 其中to_python方法的作用就是将你传过去的参数转换成对应类型的数据,比如你设置传参是uuid类型数据,那么当你传参以后,就会

Django 基础(一),项目创建,URL路由,数据库操作

一.安装Django 下载地址:https://www.djangoproject.com/download/ 1.tar zxvf Django-1.8.10.tar.gz 2.cd Django-1.8.10 3.python setup.py install 二.创建一个Django项目 django-admin startproject sitename 常用命令: python manage.py runserver 0.0.0.0 python manage.py startapp

ASP.NET MVC 的URL路由介绍

在这个教程中,向你介绍每个ASP.NET MVC一个重要的特点叫做URL路由.URL路由模块是负责映射从浏览器请求到特定的控制器动作. 在教程的第一部分,你将学习标准路由表如何映射到控制器的动作.在教程第二部分,你将学习如何修改默认路由表成为自定义路由. 使用默认路由表 当你创建一个新的ASP.NET MVC 应用程序,应用程序已经配置了默认的URL路由.URL路由在两个地方设置. 第一,URL路由配置在你的应用程序WEB配置文件中(Web.config文件).文件中有四个有关路由的配置 节:s

mvc url路由参数的加密和解密

查看某个信息的时候一般会在url上加上该信息在数据库中对应的主键id(而且一般是自增的) url是这样子的 xxxDetail/1 , 虽然对于我们开发人员来说可以这种显式的数据库主键会方便调试过程,但是这种url的安全性比较低 所以想将这类id给加密了, 当然也不想在需要此处理的地方 添加上加密或解密的代码; 基于mvc的路由机制我们可以很方便的将 输出的url和输入的url参数进行自动的加密和解密: 一.通过扩展UrlHelper方法, 对参数进行加密 1 public static cla

ASP.NET 4的Demo实践:URL路由改进支持

从.NET框架3.5 SP1开始,微软推出了ASP.NET路由支持,从而实现了特定资源的URL与其对应的Web服务器上的物理文件之间的彻底解耦.借助于ASP.NET路由支持,开发人员可以定义一组路由规则,从而实现把路由模式映射到一个生成相应内容的类.例如,你可以把URL“Categories/CategoryName”映射到一个类,该类接收CategoryName而最终生成对应于此种类的产品信息显示于一个网格中的一组HTML标记.有了这样的映射,用户便可以通过访问www.yoursite.com

ASP.NET MVC5(一)—— URL路由

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 using System.Web.Mvc.Routing.Constraints; 7 using System.Web.Routing; 8 9 namespace UrlAndRoutes 10 { 11 public class RouteConfig 1

修正Thinkphp 3.2 分页Page类以支持URL路由

http://www.thinkphp.cn/topic/22114.html 最终目的实现以http://www.fl900.com/product/lists/1-0-0-1.html这样的URL形式且支持分页. 路由配置: '/^product\/lists\/(\d+)-(\d+)-(\d+)-(\d+)$/' => 'Product/lists?id=:1&aid=:2&sid=:3&p=:4', 修正Library\Think\Page.class.php分类以支

Django URL路由分发系统

Django  URL路由分发系统 URL匹配过程 在Django中,我们使用urls.py模块处理url的分发 例:http://127.0.0.1:8080/abindex?a=1 1)去除域名和端口以及 /,剩下 abindex?a=1 2)拿 abindex?a=1 先到项目的 url.py 去匹配,然后拿剩下的index再到应用下面的urls.py去匹配 3)如果匹配成功,则调用相应的视图函数产生的内容返回给客户端.匹配失败的话则返回404错误. from django.conf.ur

引用nodejs的url模块实现url路由功能

我们在本地创建服务器之后需要写不同的后缀名来访问同一个站点的不同页面,如果不实现路由功能.则每次访问localhost:3000 不论后面写什么  比如localhost:3000/index.localhost:3000/detail...最终都会访问同一个地址:而用url路由则可以实现访问不同的页面:在实现url路由功能之前,首先需要引入url模块:const url = require('url');  nodejs 为我们提供了url模块,并且提供了url模块的一些方法: 最终要的方法是