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 ...
随机推荐
- 【CSS】盒子模型 之 IE 与W3C的盒子模型对比
摘要 主要看这两种盒子模型的优缺点及适用场景 一.区别 标准 W3C 盒子模型的 content 部分不包含其他部分. IE 盒子模型的 content 部分包含了 border 和 padding. ...
- 【CSS3】使用CSS3线性渐变实现图片闪光划过效果(转)
原文:http://www.nowamagic.net/librarys/veda/detail/2600 资料参考: http://www.cnblogs.com/lhb25/archive/201 ...
- CSS随笔2
1. css中: a:link { /*表示普通的,未被访问的链接状态*/ color: black;} a:visited { /*表示链接被访问过后的状态*/ color: bluev ...
- 6.RDD持久性
RDD持久性 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark弹性分布式数据集 6 ...
- perl的安装和版本切换工具-perlbrew
setenv PERL /opt/perl5 --设置新perl的起始安装路径 curl -kL http://install.perlbrew.pl | bash source /opt/perl5 ...
- JVM学习笔记二:垃圾收集算法
垃圾回收要解决的问题: 哪些内存需要回收? 线程私有区域不需要回收,如PC.Stack.Native Stack:Java 堆和方法区需要 什么时候回收? 以后的文章解答 如何回收? 首先进行对象存活 ...
- 13. leetcode 453. Minimum Moves to Equal Array Elements
Given a non-empty integer array of size n, find the minimum number of moves required to make all arr ...
- pwnable.kr memcpy之write up
// compiled with : gcc -o memcpy memcpy.c -m32 -lm #include <stdio.h> #include <string.h> ...
- 分辨率验证工具 - 【Window Resizer】的使用 - Google扩展工具
# 今天在Firefox上面安装"The Addon Bar"未果,于是转战Google了 # 想说的是http://cn.bing.com/ 简直太好用了 软件名称:Window Resizer 安 ...
- 【NO.12-2】jmeter-执行脚本
//拿jmeter举例 //要进入到jmeter工具的bin目录 //当使用其它的开源测试工具的时候,也可以参考上面这一点,即:进入到bin目录 //如果工具本身不包含bin文件,那么在工具的1级目录 ...