Flask 的路由Route详情
前言:
在上一篇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、动态url
Flask
支持在 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内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://juejin.cn/post/7029474639948546061
相关文章
- 这篇文章主要介绍了vue 实现动态路由的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-06
解决vue动态路由异步加载import组件,加载不到module的问题
这篇文章主要介绍了解决vue动态路由异步加载import组件,加载不到module的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27- 这篇文章主要介绍了如何制作自己的原生JavaScript路由,对路由感兴趣的同学,可以参考下...2021-05-04
- 今天小编就为大家分享一篇python 实现Flask中返回图片流给前端展示,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
- 这篇文章主要给大家介绍了关于vue.js Router中嵌套路由的相关资料,所谓嵌套路由就是路由里面嵌套他的子路由,文章通过示例代码介绍的非常详细,需要的朋友可以参考下...2021-06-27
- 这篇文章主要介绍了解决vue-router路由拦截造成死循环问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-05
- 这篇文章主要介绍了vue-router为激活的路由设置样式操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-18
- 这篇文章主要介绍了vue-router路由参数刷新消失的问题...2017-06-24
- 这篇文章主要介绍了Vue鼠标滚轮滚动切换路由效果的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-08-04
- angular是Google开发的一个单页面应用框架,是现在比较主流的单页面应用框架之一,下面通过本文给大家介绍AngularJs中route的使用方法和配置,感兴趣的朋友一起学习吧...2016-02-09
- 这篇文章主要介绍了react自动化构建路由的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-23
- 这篇文章主要介绍了springboot中nacos动态路由的配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-11
- 这篇文章主要给大家介绍了光宇微信小程序单页面应用路由的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
原创powershell脚本小工具ctracert.ps1跟踪路由(win8以上系统)
这篇文章主要介绍了原创powershell脚本小工具ctracert.ps1跟踪路由(win8以上系统),需要的朋友可以参考下...2020-06-30- 这篇文章主要介绍了vue路由分文件拆分管理详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-13
- 这篇文章主要介绍了vue相同路由跳转强制刷新该路由组件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-05
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
这篇文章主要介绍了AngularJS实现用户登录状态判断的方法,通过Model添加拦截过滤器,路由增加限制实现针对登陆状态的判断功能,需要的朋友可以参考下...2017-01-09- 这篇文章主要介绍了React利用路由实现登录界面的跳转,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-06
MVC默认路由实现分页(PagerExtend.dll下载)
这篇文章主要介绍了MVC默认路由实现分页,采用bootstrap的样式,文末提供了PagerExtend.dll下载地址,感兴趣的小伙伴们可以参考一下...2021-09-22Python如何使用logging为Flask增加logid
这篇文章主要介绍了Python如何使用logging为Flask增加logid,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-03-30