Flask-第二课:路由
无论是Django,还是Flask或者别的web框架的路由的目的都是建立url和函数的对应关系。
对于Flask,他的路由使用装饰器来完成。
最简单的路由
![](/assets/blank.gif)
![](/assets/blank.gif)
@app.route('/') def index():return 'Index Page'@app.route('/hello') def hello():return 'Hello World'
basic_url
route() 装饰器把一个函数绑定到对应的 URL 上。
动态路由
我们经常看到类似http://www.cnblogs.com/yangshl/的url。这里的yangshl是我的博客园的用户名。在Fask中也有带变量的路由。
给 URL 增加变量的部分,把一些特定的字段标记作为参数传入到函数中。当然也可以指定一个可选的转换器通过规则 。
![](/assets/blank.gif)
![](/assets/blank.gif)
@app.route('/<path:username>/<pid>/hello') def hello_world(pid, username):print("pid", pid)print("username", username)return 'Hello World!'
View Code
若url是:http://127.0.0.1:8090/kelly/hi/28/hello
则我们截取到
pid 28
username kelly/hi
这说明函数中参数的顺序可以和url中变量的顺序不一致,他们是按照关键字来传参的。而且路由的前后都可以固定的url部分。
其中:path是路由转换器。
实际上Flask有如下几个路由转换器:
- 'default': <class 'werkzeug.routing.UnicodeConverter'>
- 'string': <class 'werkzeug.routing.UnicodeConverter'>
- 'any': <class 'werkzeug.routing.AnyConverter'>
- 'path': <class 'werkzeug.routing.PathConverter'>
- 'int': <class 'werkzeug.routing.IntegerConverter'>
- 'float': <class 'werkzeug.routing.FloatConverter'>
- 'uuid': <class 'werkzeug.routing.UUIDConverter'>
我们通过url传递的变量都是字符串,可以通过转换器来来进行转换类型和规定它匹配的格式。比如int,若我么传入了abc,则不匹配,会报404错误。
自定义路由转换器。
class RegexConverter(BaseConverter):def __init__(self, map, *args):self.map = mapself.regex = args[0]
# 注册转换器
app.url_map.converters['regex'] = RegexConverter
@app.route('/view/<regex("[0-9\.,]+"):uuid>/')
def view(uuid):
return "view uuid: %s" % (uuid)
再进一步:self.regex到底是什么?
Flask(其实是Werkzeug)使用Converter把URL中特殊部分(<regex("[a-zA-Z0-9]+"):uuid>)转换为Python变量,通用格式是<converter(args):var_name>。在这个例子中,一个叫regex的converter把URL中相应字段转换为view()中的uuid变量。
因此,converter的regex就是用来判断这串字符是否符合转换格式,ok就转换,否则跳过。对于IntegerConverter来说,"abc"显然无能为力。也就是说,其实Werkzeug的路由本来就支持用正则表达式。string、int、float等都是从它派生出来的(可以看看IntegerConverter等built-in Converter的regex)。
至于为什么不显式地支持,我猜可能是因为正则表达式不容易写好,buggy。
反向路由
本质是根据函数名反向生成url,使用函数 url_for() 来针对一个特定的函数构建一个 URL。它能够接受函数名作为第一参数,以及一些关键字参数, 每一个关键字参数对应于 URL 规则的变量部分。未知变量部分被插入到 URL 中作为查询参数。
with app.test_request_context():
print(url_for('hello_world', username = 'kelly', pid = '12'))
则得到的url是:/kelly/12/hello
若url_for('hello_world', username = 'kelly', pid = '12', _external=True)则返回完整路径:
http://localhost/kelly/12/hello
反向路由在Jinja2中也有使用,用于引入一些静态文件。
总之:路由是url和处理函数之间的桥梁。
转载于:https://www.cnblogs.com/yangshl/p/6408084.html
Flask-第二课:路由相关推荐
- 第二课 SS7信令系统网络简介
第二课 SS7信令系统网络简介 课程目的: 描述SS7信令网络的基本元素: 信令点(SSP,SCP,STP) 链路和链路集 路由和路由集 计算一条信令链路的信息传输容量 论述SS7信令拓普结构的可靠性 ...
- 《迅雷链精品课》第二课:区块链核心技术框架
上一节课我们明白了什么是区块链,了解了区块链的关键特性和技术等内容,这节课我们将深入了解区块链的技术架构,系统学习区块链平台的6个层次:数据层.网络层.共识层.合约层.应用层.接口层,另外通常还有客户 ...
- 一步步带你做vue后台管理框架(二)——上手使用 系列教程《一步步带你做vue后台管理框架》第二课
github地址:vue-framework-wz 线上体验地址:立即体验 <一步步带你做vue后台管理框架>第一课:介绍框架 <一步步带你做vue后台管理框架>第二课:上手使 ...
- 第二课 如何在WINDOWS环境下搭建以太坊开发环境
[本文目标] 根据本文指导,可以在WINDOUWS环境下完成以太坊智能合约部署前的比较环境准备. [技术收获] 如何在WINDOW(笔者以WINDOWS 10为例)环境搭建以太坊开发环境,按照以下安装 ...
- 第二课 Beego仿优酷-go环境安装和Beego框架基础
第二课 Beego仿优酷-go环境安装和Beego框架基础 tags: Beego 慕课网 categories: go环境安装 Beego框架 文章目录 第二课 Beego仿优酷-go环境安装和Be ...
- 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫
系列教程 手把手教你写电商爬虫-第一课 找个软柿子捏捏 如果没有看过第一课的朋友,请先移步第一课,第一课讲了一些基础性的东西,通过软柿子"切糕王子"这个电商网站好好的练了一次手,相 ...
- android 集合 内存泄漏,Android内存泄漏第二课--------(集合中对象没清理造成的内存泄漏 )...
一.我们通常把一些对象的引用加入到了集合容器(比如ArrayList)中,当我们不需要该对象时,并没有把它的引用从集合中清理掉,这样这个集合就会越来越大.如果这个集合是static的话,那情况就更严重 ...
- cdata节 赋值变量_JS原生练习题:第二课第5~12节
第五节:函数传参,改变Div任意属性的值 函数传参,改变Div任意属性的值 属性名: 属性值: 确定 重置 在上方输入"属性名"和"属性值",点击确认按钮查看效 ...
- 0.0 目录-深度学习第二课《改善神经网络》-Stanford吴恩达教授
文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...
- Coursera公开课笔记: 斯坦福大学机器学习第二课“单变量线性回归(Linear regression with one variable)”
Coursera公开课笔记: 斯坦福大学机器学习第二课"单变量线性回归(Linear regression with one variable)" 发表于 2012年05月6号 由 ...
最新文章
- java程序设计 徐红_Java程序设计-徐红 王灿
- ngrok linux开机自启动,CentOS 搭建ngrok服务器
- ML之回归预测:利用两种机器学习算法(LiR,XGBoost(调优+重要性可视化+特征选择模型))对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值
- java替换html样式_Java Jsoup替换标签的CSS样式
- 拼图项目的动机和目标
- Spring Boot快速注册服务脚本
- Oracle数据库基础知识(二)
- C# socket编程TcpClient与TcpListener UdpClient
- 【从零开始的OpenGL学习】1. 配置OpenGL,绘制最简单的一个三角形,HelloWorld(学习笔记)
- 平均销售额计算机公式,销售额是什么意思(销售额的基本计算公式)
- 有测试狗狗好坏的软件吗,6个测试判断狗狗性格,胆小或凶猛一测便知,你家狗狗是哪种?...
- Altium_Protel99SE圆线路板添加工艺边
- vsual studio 如何关闭禁止mscorsvw.exe (转)
- 对京东云鼎的学习笔记
- python假期培训班
- Java基础-进程与线程
- 2021新手找货源技巧来啦!萌啦货源手把手教你选品!
- java拼音分词_使用Pinyin4j进行拼音分词的方法
- html $符号的作用,javascript 中$符号是代表什么意思!
- ZUCC_Linux系统管理_实验七 LVM
热门文章
- Alibaba Druid未授权访问漏洞记录(敏感目录,端口:不确定)
- python 判断文件夹或文件是否存在
- python制作各种条形图
- oracle中的日期查询在mybatis中写法
- G - Hard problem CodeForces - 706C DP
- 工作中遇到的问题--使用注解进行增加删除修改的验证
- Install and run DB Query Analyzer 6.04 on Microsoft Windows 10
- STM32之SDIO例程
- android studio 引入httpclient,HttpClient不会导入Android Studio
- 面试官:你给我画一下秒杀系统的架构图!