这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战。
在上一篇Flask 入门系列之Hello Flask!中,我们用 Flask 框架写了一个 Hello Flask 应用程序,我们了解到 Flask 框架简洁高效、可以快速上手,接下来将对 Flask 框架的各项功能详细的介绍一下,本篇文章介绍的是 Flask 的路由(Route)。
路由
所谓路由,就是处理请求url和函数之间关系的程序,一个Web应用不同的路径会有不同的处理函数,当我们请求应用时,路由会根据请求的 url 找到对应处理函数。
视图函数绑定多个url
一个视图函数可以绑定多个 url,比如下面的代码把/hi
和/hello
都绑定到hello()
函数上,这就会为hello()
函数注册两个路由,用户访问这两个 url 均会触发该函数。
在上一篇 Hello Flask 的基础上,添加下面的函数,并运行程序。
1 | python复制代码@app.route('/hi') |
动态url
Flask 支持在 url 中添加变量部分,使用<变量名>
的形式表示,Flask 处理请求时会把变量传入视图函数,所以可以在试图函数内获取该变量的值。
1 | python复制代码@app.route('/user/<name>') |
当我们在浏览器中访问http://127.0.0.1:5000/hello/tigeriaf
地址时,将在页面上看到”Hello tigeriaf!”。url 路径中/hello/
后面的参数被hello()
函数的name
参数接收并使用。
我们还可以在 url 参数前添加转换器来转换参数类型,比如:
1 | python复制代码@app.route('/user/<int: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 变量参数默认值映射。
1 | python复制代码@app.route('/user', defaults={'name': 'default_name'}) |
上述代码中,/user
不带参数,访问/user
时,变量name
就会使用默认值”default_name”。其实,这种做法等同于在hello_user()
函数内给name
变量设置缺省值。
HTTP请求方法设置
HTTP 请求方法常用的有GET
、POST
、PUT
、DELETE
。Flask 路由也可以设置请求方法,在app.route()
装饰器中使用使用methods
参数传入一个包含监听的 HTTP 请求的可迭代对象。
比如,下面的视图函数同时监听GET
请求和POST
请求:
1 | python复制代码from flask import request |
分别使用GET
请求和POST
请求访问http://127.0.0.1:5000/login
时,会返回不同的内容,如果使用其他的请求方法(如PUT
),会报 405 Method Not Allowed 的错误。
url构建
Flask
提供了url_for()
方法来快速获取及构建 url,方法的第一个参数是视图函数的名称,之后的一个或多个参数对应的是 url 变量部分。比如:
1 | python复制代码@app.route('/superuser') |
上述代码中,url_for()
方法是根据试图函数名称获取url,redirect()
是根据 url 重定向到视图函数,二者配合使用,用作 url 的重定向。hello(name)
函数接受来自 url 的参数的值,判断值是否与superuser
匹配,如果匹配,则使用redirect(url_for())
将应用程序重定向到hello_superuser()
函数,否则重定向到hello_user()
函数。
原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~
最后,感谢女朋友在工作和生活中的包容、理解与支持 !
本文转载自: 掘金