flask教程05

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

flask教程05

反向解析生成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,
}