2,flask URL进阶
video5
flask特点:
1,为框架,简介,高扩展性。
2,flask相关依赖(jinja2,werkzeug)设计优秀。
3,开发高效,如SQL的ORM
video6 debug模式
我只推荐run->edit
video7 配置文件
1,文件方式
若文件路劲不带,可加silent让它在找不到路径时候也不报错。
2,常规方式
video8 URL中的两种传参
path可以接受‘/’。
可以接受多个‘/’的URL:
可以接受UUID:
全宇宙都唯一的随机数,可以做主键。
any:可以指定多种路径
1 @app.route('/<any(blog,user):url_path>/<id>')
2 def detail(url_path,id):
3 if url_path == 'blog':
4 return 'Blog:%s' %id
5 else:
6 return 'User:%s' %id
作用:不同的URL对应相同的视图函数就这么做。
video9 url_for
带参数的list函数中的page代入url_for的过程。
如果多带一个count呢?
则将以查询字符串的形式出现,结果为:
带参数的视图函数有个功能:
当你浏览一个网页想要评论的时候发现自己没登陆,等你登陆后又能回到你刚才要评论的页面,这种情况下可以实现通过url_for带参数的视图函数。
先用arg获取那个url后缀参数,通过url_for返到评论页面。
video10 自定义url_for转换器
转换器中已经存在int,float,string,UUID,path,any。那么我们定义一个电话号码的?
from werkzeug.routing import BaseConverter
在BaseConverter中Ctrl+B查看源代码:
发现一个父类:
class BaseConverter(object)
而any继承了这个父类:
class AnyConverter(BaseConverter):
且最后有一个对应关系:
#: the default converter mapping for the map.
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
也就是说我们自己可以定义一个:
class TelephoneConverter(BaseConverter):
电话转换器去继承父类,然后加入默认映射表中。
1 from flask import Flask
2 from werkzeug.routing import BaseConverter
3
4 app = Flask(__name__)
5
6 #url中限定手机号码的格式
7 class TelephoneConverter(BaseConverter):
8 regex = r'1[345678]\d{9}'
9 num_convert = int
10 app.url_map.converters['tel'] = TelephoneConverter
11
12 @app.route('/tel/<tel:my_tel>')
13 def gg(my_tel):
14 return '%s' %my_tel
第8行表示11位的电话号码。
第10行表示添加到默认映射表中。
结果为:
下面定义a+b形式的转换器:
先看代码:
1 #现有需求需要访问a、b两个板块的文章返回出来
2 from werkzeug.routing import BaseConverter
3 class ListConverter(BaseConverter):
4 def to_python(self, value):
5 return 'hahaha'
6 app.url_map.converters['list'] = ListConverter
7
8 @app.route('/list/<list:bankuai>')
9 def aabb(bankuai):
10 return '%s' %bankuai
再看结果:
我们发现这个to_python函数中的value实际上接受了url中的a+b,但是这个函数中我们的写法是不管传入什么我们都返回hahaha,所以页面上返回了hahaha。也就是说url中的值会经由to_python传给视图函数。to_url相反。
如果我们在to_python函数中写上别的东西呢?岂不是能实现我们想要的转换器?
1 #现有需求需要访问a、b两个板块的文章返回出来
2 from werkzeug.routing import BaseConverter
3 class ListConverter(BaseConverter):
4 def to_python(self, value):
5 return value.split('+')
6 app.url_map.converters['list'] = ListConverter
7
8 @app.route('/list/<list:bankuai>')
9 def aabb(bankuai):
10 return '%s' %bankuai
第5行是变化后的代码,效果如下:
再讲讲to_url。
1 from werkzeug.routing import BaseConverter
2 from flask import url_for
3 class ListConverter(BaseConverter):
4 def to_python(self, value):
5 return value.split('+')
6 def to_url(self, value):
7 print("value:",value)
8 return "+".join(value)
9 app.url_map.converters['list'] = ListConverter
10
11 @app.route('/list/<list:bankuai>')
12 def aabb(bankuai):
13 return '%s' %bankuai
14
15 @app.route('/')
16 def hello_world():
17 print(url_for('aabb',bankuai=['d','c']))
18 return 'to_url'
17的bankuai进入到to_url中,传进去的是['d','c'],所以第7行返回了这个值,然后return回“+”连接的dc,最终在url_for的时候就打印成了‘/list/d+c’
结果:
第一个值是7行的,第二个是17行的。
总结下:
video11 url_for小细节
先看代码块
1 @app.route('/list/')
2 def hello_world():
3 return 'Hello World!'
再看效果:
我们发现我们在第1行list后带了个“/”,然后在浏览器输入时候带不带这个斜杠都能访问到。
再看不带斜杠的:
所以我们选择第一种,因为第二种方法中可能代码中没写url写了的时候会出故障。
get和post
video12 重定向详解
video13 关于响应(Response)
video29 加载静态文本
用url_for
video 30 模板继承
super继承了父模板中的文件。
2,flask URL进阶的更多相关文章
- python flask url参数
python flask url参数 常见 url 传参中都是 xxx?xxx=xxx 问题来了 flask中我没有找到 关于xx? 问号的使用方式 是不是flask就不支持这种方式 如果有 rout ...
- Flask URL构建
Flask URL构建 url_for()函数对于动态构建特定函数的URL非常有用.该函数接受函数的名称作为第一个参数,以及一个或多个关键字参数,每个参数对应于URL的变量部分. 以下脚本演示了如何使 ...
- flask 电子邮件进阶实践-用模板发送163邮件
电子邮件进阶实践 下面来学习构建邮件的HTML正文,并使用模板组织内容. 一封电子邮件的正文可以是纯文本(text/plain),也可以是HTML格式的文本(text/html).处于全面的考虑,一封 ...
- 1.Flask URL和视图
1.1.第一个flask程序 from flask import Flask #创建一个Flask对象,传递__name__参数进去 app = Flask(__name__) #url与视图映射 @ ...
- 3.flask视图进阶
1.add_url_rule和app.route原理剖析 from flask import Flask app = Flask(__name__) # 下面是我们定义一个路由和对应视图的常用方法 ' ...
- flask 2 进阶
# 创建项目 jinja2 语法基础 # pycharm 里面 创建 new project -->pure python 之后选择路径 选择解释器 以及虚拟环境问题 from flask im ...
- flask之URL和视图(一)
1.Flask URL和视图 1.1.第一个flask程序 from flask import Flask #创建一个Flask对象,传递__name__参数进去 app = Flask(__name ...
- Flask变量规则(构建动态url)
原文出处: http://codingdict.com/article/4867 可以通过将可变部分添加到规则参数来动态构建URL.这个变量部分被标记为 < variable-name>. ...
- [py]flask操作cookie&django的seesion和cookie机制
浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...
随机推荐
- RHSA-2017:2679-重要: 内核 安全更新(需要重启、存在EXP、代码执行)
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...
- thinkphp5.1 阿里云短信接口
1.首先声明,我个人是没有,accessKeyId accessKeySecret SignName TemplateCode这些参数是需要自己去,阿里云注册,生成的. 我用的密钥( ...
- ansible-playbook-roles基本使用
1. ansible-角色-roles基本使用 1.1) 创建roles目录结构 1 [root@test-1 ansible]# mkdir -p /ansible/roles/{common,n ...
- Informatic 内些坑
1. 工作流调用工作流(可实现无规则时间点自由调度) pmcmd startworkflow -sv 集成服务名称 -d 配置域名称 -u Administrator -p Administrato ...
- 多测师讲解自动化测试 _接口面试题(001)_高级讲师肖sir
1.为什么要做接口测试(必要性)1.可以发现很多在页面上操作发现不了的bug2.检查系统的异常处理能力3.检查系统的安全性.稳定性4.前端随便变,接口测好了,后端不用变5.可以测试并发情况,一个账号, ...
- day07 Pyhton学习
一.昨日内容回顾 小数据池,常量池 id()内存地址 is == 的区别 is 判断的是内存地址 == 判断的是值 存在的意义: 快速的创建字符串,整数,布尔值的对象 帮你节省内存 解码和编码 enc ...
- golang通过cgo调用lua
目录 1.前期准备 2.测试go代码 3.完成的一个学习项目 4.总结 1.前期准备 1.第三方库:https://github.com/aarzilli/golua 2.下载lua源码:https: ...
- spring boot:用redis+lua实现表单接口的幂等性(spring boot 2.2.0)
一,什么是幂等性? 1,幂等: 幂等操作:不管执行多少次,所产生的影响都和一次执行的影响相同. 幂等函数或幂等方法:可以使用相同的参数重复执行,并能获得相同的结果的函数/方法. 这些函数/方法不用担心 ...
- centos8平台使用wkhtmltopdf实现html网页转pdf
一,wkhtmltopdf的用途 wkhtmltopdf可以直接把任何一个可以在浏览器中浏览的网页直接转换成一个pdf 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnb ...
- 反射(Reflection)
Java学习笔记--反射(Reflection) 关于反射 能够分析类能力的程序称之为反射(Reflection) 反射机制可以用来: 在运行时分析类的能力 在运行时检查对象,例如:编写一个适合所有类 ...