#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:
this visit will give an error, @app.route("/goods/<int:goods_id>")
here it is int:
without 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)