10. The routing parameter extraction with a custom routing switches (Flask Study Notes)

Here Insert Picture Description

#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)

Results:
Here Insert Picture Descriptionthis visit will give an error, @app.route("/goods/<int:goods_id>")here it is int:
Here Insert Picture Descriptionwithout converter type, the default rule is ordinary strings (except / characters)

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

When we send a phone number:

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

Always need to take your phone number to access

The default converter can not meet demand!

Need to import: from werkzeug.routing import BaseConverter
falsk dependent on it.

#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)

Here Insert Picture Description

Published 60 original articles · won praise 8 · views 3334

Guess you like

Origin blog.csdn.net/qq_43476433/article/details/103431244