10.路由提取参数与自定义路由转换器(flask学习笔记)

在这里插入图片描述

#coding:utf-8
#file: converter_demo.py
#@author: young
#@contact: [email protected]
#@time: 2019/12/6 23:53
from flask import  Flask, current_app
# 创建flask的应用对象
# __name__   表示当前模块的名字
#模块名:flask以这个模块所在的目录为总目录,默认这个目录中的static为静态目录,templates为模板目录
app = Flask(__name__)

#eg:127.0.0.1:5000/goods/123
#从列表里从到右去找,看见int,匹配int类型的值
@app.route("/goods/<int:goods_id>")
#:进行分割,
#<>:提取方式
def goods(goods_id):
    return "good detail page %s" % goods_id

if __name__ == '__main__':
    #通过url_map可以查看整个flask中的路由信息
    print(app.url_map)
    #启动flask程序
    app.run(debug = True)

结果:
在这里插入图片描述这样访问就会报错,@app.route("/goods/<int:goods_id>"),这里是int:
在这里插入图片描述不加转换器类型,默认是普通字符串规则(除了/的字符)

@app.route("/goods/<goods_id>")

当我们向一个手机号发送:

#127.0.0.5000/send/18612345678
def send_sums(mobil):
    return  "send sms to %s" %mobil

每次都需要带上手机号访问

默认转换器不能满足需求了!

需要导入:from werkzeug.routing import BaseConverter
falsk依赖于它。

#coding:utf-8
#file: converter_demo.py
#@author: young
#@contact: [email protected]
#@time: 2019/12/6 23:53
from flask import  Flask, current_app
from flask import  redirect,url_for
from werkzeug.routing import  BaseConverter

app = Flask(__name__)

#1、定义自己的转换器,类的方式定义:eg:定义接受正则表达式的转换器
class RegexConverter(BaseConverter):
    def __init__(self,url_map,regex):
        #将自己的正则表达式的参数保存到对象属性中,flask会去使用属性来进行路由的正则匹配
        #调用父类构造初始化方法
        super(RegexConverter,self).__init__(url_map)
        self.regex = regex
        #有一个固定的属性,从BaseConverter中拿到的
        #存放匹配正则表达式什么样子
        #url_map:构造转换器对象的时候将app.url_map.converters传回的路由映射列表当做整体传到第一个参数
        #正则表达式作为第一个参数传进去
        
#2.将自定义的转换器添加到flask的应用中  re:起的名字,将类添加到app.url_map.converters中,以键值对保存
app.url_map.converters["re"] = RegexConverter

#127.0.0.5000/send/18612345678
@app.route("/send/<re(r'1[34578]\d{9}'):mobile>")
def send_sums(mobile):
    return  "send sms to %s" %mobile

if __name__ == '__main__':
    #通过url_map可以查看整个flask中的路由信息
    print(app.url_map)
    #启动flask程序
    app.run(debug = True)

在这里插入图片描述

发布了60 篇原创文章 · 获赞 8 · 访问量 3334

猜你喜欢

转载自blog.csdn.net/qq_43476433/article/details/103431244