Flask01 路由控制(转换器)、反转、请求方法控制
1 提出问题
如何实现前端传过去的路径时动态的(即:多个url对应一个url视图函数)
例如:
浏览器中输入 http://127.0.0.1:5000/test/good/ 或者 http://127.0.0.1:5000/test/fury/ 时,在后台执行的都是同一个url视图函数
2 解决问题
利用flask的转换器实现
2.1 什么是转换器
@app.route('/test/<string:let>/', endpoint="test01") 中 <> 的部分就叫做转换器
代码解释:路径的最后一部分可以是任意值,但是这个值得类型必须是string类型

from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "这是主页面, hello" @app.route('/test/<string:let>/', endpoint="test01")
def test(let):
return "多个url对应一个url视图函数 " + let print(app.url_map)
if __name__ == "__main__":
app.run(debug=True)
2.2 转换器的种类
default 默认转换器(注意:默认转换器就是字符串转换器)
string 字符串转换器,不能识别 /
path 路径转换器,可以看成是string转换器的加强版,可以识别 /
点睛:我们在访问静态文件时之所以可以通过路径进行访问,是因为静态文件的转换器时path类型
int 整型转换器
float 浮点型转换器
点睛:int转换器只能识别整数,float转换器只能识别浮点型
点睛:在url视图函数中会自动将获取到的数据转换成相应的类型
any 多选一类型转换器
uuid UUID类型转换器
点睛:在url视图函数中获取到的数据时UUID类型
点睛:如何获取uuid
form uuid import uuid4
uuid4()
注意: uuid4() 返回的是一个UUID类型的类
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "这是主页面, hello" @app.route('/test/<string:let>/', endpoint="test01")
def test(let):
return "字符串类型转换器 " + let @app.route('/test/<let>', endpoint='test02')
def test(let):
return "默认类型转换器 " + let @app.route('/test/<path:let>/', endpoint='test03')
def test(let):
return "path类型转换器 " + let @app.route('/test/<int:let>/', endpoint='test04')
def test(let):
return 'int类型转换器 ' + str(let) @app.route('/test/<float:let>/', endpoint='test05')
def test(let):
return 'float类型转换器 ' + str(let) @app.route('/test/<any(fury,zeus,"123","12.34"):let>/', endpoint='test06')
def test(let):
return 'any类型转换器 ' + let @app.route('/test/<uuid:let>/', endpoint='test07')
def test(let):
return 'uuid雷翔转换器 ' + let print(app.url_map)
if __name__ == "__main__":
app.run(debug=True)
3 提出问题
如何根据端点去寻找路径
4 解决问题
通过反转的方式实现
补充知识点:url和url视图函数是怎么对应的
flask中url跟视图函数并不是直接对应的,而是有一个中间者-endpoint
url -> endpoint -> view_function
根据url找到对应的端点,在根据对应的端点找到url视图函数;素以端点时url和url视图函数之间的桥梁,所以我们可以根据端点找到对应的路径
4.1 如何通过 url_for 方法来获取路径
4.1.1 从flask模块中引入url_for
from flask import url_for
4.1.2 利用 ur_for 获取路径
path = url_for('myTest')

from flask import Flask
from flask import url_for
app = Flask(__name__)
@app.route('/')
def index():
path = url_for('myTest')
print(path)
return '这里还是主页'
@app.route('/test/', endpoint='myTest')
def test():
return '这里是测试页面'
print(app.url_map)
if __name__ == '__main__':
app.run()
4.2 url_for 小应用
把通过端点获取到的路径放到一个html中去,这样无论如何修改url路径,只要端点不变那么就不用修改html中的路径
from flask import Flask
from flask import url_for
app = Flask(__name__)
@app.route('/')
def index():
path = url_for('myTest')
print(path)
html = '''
<a href="%s">点击进入测试页面</a>
'''%path
return html
@app.route('/test/', endpoint='myTest')
def test():
return '这里是测试页面'
print(app.url_map)
if __name__ == '__main__':
app.run(debug = True)
4.3 通过蓝图的端点获取蓝图路径
和普通路由的区别:蓝图的端点在前面需要加上蓝图名
from flask import Flask
from flask import url_for
from flask import Blueprint app = Flask(__name__) bp = Blueprint('movie', __name__)
@bp.route('/action/', endpoint='actionMovie')
def action():
return '动作电影专区' app.register_blueprint(bp) @app.route('/')
def index():
path = url_for('movie.actionMovie')
print(path)
html = '''
<a href="%s">点击进入动作电影</a>
'''%path
return html
@app.route('/test/', endpoint='myTest')
def test():
return '这里是测试页面'
print(app.url_map)
if __name__ == '__main__':
app.run(debug = True)
4.4 带变量的路径反转
from flask import Flask
from flask import url_for app = Flask(__name__) @app.route('/')
def index():
path = url_for("test01", let='fury')
return '这是主页 ' + path @app.route('/test/<string:let>/', endpoint="test01")
def test(let):
return '测试页面 ' + let; print(app.url_map) if __name__ == '__main__':
app.run(debug = True)
from flask import Flask
from flask import url_for app = Flask(__name__) @app.route('/')
def index():
path = url_for("test01", let='fury', name='zeus')
return '这是主页 ' + path @app.route('/test/<string:let>/', endpoint="test01")
def test(let):
return '测试页面 ' + let; print(app.url_map) if __name__ == '__main__':
app.run(debug = True)
5 控制请求方式
5.1 请求方式
POST GET HEAD OPTIONS
点睛:有get就默认有head,options永远都有
5.2 如何修改请求方式
注意:默认情况下有三种请求方式


5.3 如何通过python实现请求
利用pip安装requests包
pip install requests
导入相关方法
from requests import get, post, head, options
调用相关方法
resp = get(url)
查看相应头部信息
resp.headers
查看响应实体信息
resp.content.decode('utf-8')
Flask01 路由控制(转换器)、反转、请求方法控制的更多相关文章
- Flask03 路由控制(转换器)、反转、请求方法控制
1 提出问题 如何实现前端传过去的路径时动态的(即:多个url对应一个url视图函数) 例如: 浏览器中输入 http://127.0.0.1:5000/test/good/ 或者 http://12 ...
- Nginx优化防爬虫 限制http请求方法 CDN网页加速 架构优化 监牢模式 控制并发量以及客户端请求速率
Nginx防爬虫优化 Robots协议(也称为爬虫协议,机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可 ...
- IOS中tableView每组的头部控件、通过tableView的代理方法控制某一行的cell能否达到高亮选中状态
一.tableView每组的头部控件 1.控件宽度默认就是tableView的宽度 2.控件高度由下面的代理方法决定 - (CGFloat)tableView:(UITableView *)table ...
- ESP8266固件修改可以控制多个IO方法
之前在论坛上找到了一个通过ESP8266可以控制GPIO0的固件和app,但是自己做的家庭影音灯光系统是需要控制多个IO从而控制STM32.通过观看大明的视频,了解了GPIO的控制方法. 在固件的ap ...
- 基于hi-nginx的web开发(python篇)——动态路由和请求方法
hi.py的提供的路由装饰器接受两个参数,第一个参数指定动态路由的正则模式,第二个参数指定同意的http请求方法列表. 比如: @app.route(r"^/client/?$", ...
- php控制访问人数的方法
php控制访问人数的方法 <pre>//添加访问人数 public function addfangwen() { header("Content-type:text/html; ...
- Spring下的@Order和@Primary与javax.annotation-api下@Priority【Spring4.1后】等方法控制多实现的依赖注入(转)
@Order 可以作用在类.方法.属性. 影响加载顺序. 若不加,spring的加载顺序是随机的. @Primary 当注入bean冲突时,以@Primary定义的为准. @Order是控制配置类的加 ...
- HTTP请求响应报文&&相关状态码&&GET_POST请求方法 总结
HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行 请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GE ...
- 微信小程序数据请求方法wx.request小测试
微信小程序数据请求方法 wx.request wxml文件: <view> <textarea value="{{textdata}}"/> </vi ...
随机推荐
- tcpdump使用方法小结
在进行网络测试的时候,我们经常需要进行抓包的工作,当然有许多测试工具可以使用,比如sniffer, ethreal等.但最为方便和简单得就非TCPDump莫属. Linux的发行版里基本都包括了这个工 ...
- Mybatis-Generator生成Mapper文件中<if test="criteria.valid">的问题解答
写在前面 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去 ...
- Jetty的工作原理
Jetty的工作原理 Jetty 的基本架构 Jetty 目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器,它有一个基本数据模型,这个数据模型就 ...
- JavaScript基本数据类型
JavaScript基本数据类型 在JavaScript种一共有6种数据类型:Null.Undefined.Boolean.String.Number.Object.其中Object是一种复杂数据类型 ...
- 表达式求值(二叉树方法/C++语言描述)(三)
二叉树方法求值对运算数处理的方法与栈方法求值不太相同,除了将字符串中的运算数转换为浮点类型外,还需要生成新的节点: void Calculator::dealWithNumber(char *& ...
- 表达式求值(二叉树方法/C++语言描述)(二)
表达式二叉树节点的数据可能是运算数或运算符,可以使用一个联合体进行存储:同时还需要一个变量来指示存储的是运算数还是运算符,可以采用和栈方法求值中一样的枚举类型TokenType: typedef en ...
- CSS3新增文本属性实现图片点击切换效果
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 新的表格展示利器 Bootstrap Table
1.bootstrap table简介及特征 Bootstrap Table是国人开发的一款基于 Bootstrap 的 jQuery 表格插件,通过简单的设置,就可以拥有强大的单选.多选.排序.分 ...
- 【我的漫漫跨考路】数据结构之单链表线性存储实现 Beta
正文之前 昨天晚上阶段性的完成了一部分数学的复习,所以今天打算撸一撸代码,然后发现提电脑忘指针.所以自己磕磕盼盼,对照了一下网上的代码,总算把线性存储单链表的数据类型实现,给自己写出来了. 废话不多说 ...
- SpringMVC+Mybatis实现的Mysql分页数据查询
周末这天手痒,正好没事干,想着写一个分页的例子出来给大家分享一下. 这个案例分前端和后台两部分,前端使用面向对象的方式写的,里面用到了一些回调函数和事件代理,有兴趣的朋友可以研究一下.后台的实现技术是 ...