url路由
请求方式限定
使用 methods 参数指定可接受的请求方式,可以是多种
@app.route('/',methods=['GET'])
def hello():
return '<h1>hello world</h1>'
路由查找方式
同一路由指向两个不同的函数,在匹配过程中,至上而下依次匹配
@app.route('/')
def hello():
return '<h1>hello world</h1>'
@app.route('/')
def hello_2017():
return '<h1>hello 2017</h1>'
所以上面路由 /
输出的结果为 hello 函数的结果
路由传参示例
有时我们需要将同一类URL映射到同一个视图函数处理,比如:使用同一个视图函数 来显示不同用户的个人信息。
从路由中提取url参数时需要使用flask中的路由转换器,所谓的路由转换器提取参数其实就是在进行url匹配过程中根据预先设定的 正则表达式来提取url地址中的某一部分作为参数,然后传递给对应的视图。
@app.route('/user/<int:id>')
def hello_itheima(id):
return 'hello itcast %d' %id
反向解析生成url地址
如果需要动态生成视图对应的url地址,可以使用flask提供的url_for函数。
from flask import url_for
使用方式: url_for('视图函数名')
自定义路由转换器
在web开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要用到正则匹配,限制访问,优化访问
- 导入转换器包
from werkzeug.routing import BaseConverter
- 自定义转换器并实现
# 自定义转换器
class Regex_url(BaseConverter):
def __init__(self,url_map,*args):
super(Regex_url,self).__init__(url_map)
self.regex = args[0]
app = Flask(__name__)
# 将自定义转换器类添加到转换器字典中
app.url_map.converters['re'] = Regex_url
@app.route('/user/<re("[a-z]{3}"):id>')
def hello_itheima(id):
return 'hello %s' %id
自带几种转换器
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}