这篇教程Flask写得很实用,希望能帮到您。 前言: 在上一篇Flask 入门Web 微框架Hello Flask中,我们用 Flask 框架写了一个 Hello Flask 应用程序,我们了解到 Flask 框架简洁高效、可以快速上手,接下来将对 Flask 框架的各项功能详细的介绍一下,本篇文章介绍的是 Flask 的路由(Route)。
1、路由所谓路由,就是处理请求url 和函数之间关系的程序,一个Web应用不同的路径会有不同的处理函数,当我们请求应用时,路由会根据请求的 url 找到对应处理函数。
2、视图函数绑定多个url一个视图函数可以绑定多个 url ,比如下面的代码把/hi 和/hello 都绑定到hello() 函数上,这就会为hello() 函数注册两个路由,用户访问这两个 url 均会触发该函数。 在上一篇 Hello Flask 的基础上,添加下面的函数,并运行程序。 @app.route('/hi')@app.route('/hello')def hello(): return 'Hello Flask!'
3、动态urlFlask 支持在 url 中添加变量部分,使用<变量名>的形式表示,Flask 处理请求时会把变量传入视图函数,所以可以在试图函数内获取该变量的值。
@app.route('/user/<name>')def hello_user(name): return 'Hello {}!'.format(name) 当我们在浏览器中访问http://127.0.0.1:5000/hello/tigeriaf 地址时,将在页面上看到"Hello tigeriaf!" 。url 路径中/hello/ 后面的参数被hello() 函数的name 参数接收并使用。 我们还可以在 url 参数前添加转换器来转换参数类型,比如: @app.route('/user/<int:user_id>')def hello_user(user_id): return 'Hello user:{}!'.format(user_id) 访问http://127.0.0.1:5000/hello/111 ,页面上会显示"Hello user:111!" 。其中,参数类型转换器int: 控制传入参数的类型只能是整形,传入其他类型将报 404 的错误, 目前支持的参数类型转换器有: string :字符型,但是其中不能包含斜杠"/" int :整型 float :浮点型 uuid:uuid 字符类型 path :字符型,可以包含斜杠"/",如aa/bb/cc 除此之外,还可以设置 url 变量参数的默认值,如下,在app.route() 装饰器里使用defaults 参数设置,接收一个字典,来存储 url 变量参数默认值映射。 @app.route('/user', defaults={'name': 'default_name'})@app.route('/user/<name>')def hello_user(name): return 'Hello {}!'.format(name) 上述代码中,/user不带参数,访问/user 时,变量name 就会使用默认值"default_name "。其实,这种做法等同于在hello_user() 函数内给name 变量设置缺省值。
4、HTTP请求方法设置HTTP 请求方法常用的有GET 、POST 、PUT 、DELETE 。Flask 路由也可以设置请求方法,在app.route() 装饰器中使用使用methods 参数传入一个包含监听的 HTTP 请求的可迭代对象。 比如,下面的视图 函数同时监听GET请求和POST请求: from flask import request@app.route('/login', methods=['GET', 'POST'])def login(): if request.method == 'POST': return 'This is a POST request' else: return 'This is a GET request' 分别使用GET请求和POST 请求访问http://127.0.0.1:5000/login 时,会返回不同的内容,如果使用其他的请求方法(如PUT),会报 405 Method Not Allowed 的错误。
5、url构建Flask 提供了url_for() 方法来快速获取及构建 url ,方法的第一个参数是视图函数的名称,之后的一个或多个参数对应的是 url 变量部分。
比如: @app.route('/superuser')def hello_superuser(): return 'Hello superuser!'@app.route('/user/<name>')def hello_user(name): return 'Hello {}!'.format(name)@app.route('/user/<name>')def hello(name): if name == 'superuser': return redirect(url_for('hello_superuser')) else: return redirect(url_for('hello_user', name=name)) 上述代码中:url_for() 方法是根据试图函数名称获取url ,redirect() 是根据 url 重定向到视图函数,二者配合使用,用作 url 的重定向。hello(name) 函数接受来自 url 的参数的值,判断值是否与superuser 匹配,如果匹配,则使用redirect(url_for()) 将应用程序重定向到hello_superuser() 函数,否则重定向到hello_user() 函数。 到此这篇关于Flask 的路由Route详情的文章就介绍到这了,更多相关Flask 的路由Route内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net! pytorch Flask |