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进阶的更多相关文章

  1. python flask url参数

    python flask url参数 常见 url 传参中都是 xxx?xxx=xxx 问题来了 flask中我没有找到 关于xx? 问号的使用方式 是不是flask就不支持这种方式 如果有 rout ...

  2. Flask URL构建

    Flask URL构建 url_for()函数对于动态构建特定函数的URL非常有用.该函数接受函数的名称作为第一个参数,以及一个或多个关键字参数,每个参数对应于URL的变量部分. 以下脚本演示了如何使 ...

  3. flask 电子邮件进阶实践-用模板发送163邮件

    电子邮件进阶实践 下面来学习构建邮件的HTML正文,并使用模板组织内容. 一封电子邮件的正文可以是纯文本(text/plain),也可以是HTML格式的文本(text/html).处于全面的考虑,一封 ...

  4. 1.Flask URL和视图

    1.1.第一个flask程序 from flask import Flask #创建一个Flask对象,传递__name__参数进去 app = Flask(__name__) #url与视图映射 @ ...

  5. 3.flask视图进阶

    1.add_url_rule和app.route原理剖析 from flask import Flask app = Flask(__name__) # 下面是我们定义一个路由和对应视图的常用方法 ' ...

  6. flask 2 进阶

    # 创建项目 jinja2 语法基础 # pycharm 里面 创建 new project -->pure python 之后选择路径 选择解释器 以及虚拟环境问题 from flask im ...

  7. flask之URL和视图(一)

    1.Flask URL和视图 1.1.第一个flask程序 from flask import Flask #创建一个Flask对象,传递__name__参数进去 app = Flask(__name ...

  8. Flask变量规则(构建动态url)

    原文出处: http://codingdict.com/article/4867 可以通过将可变部分添加到规则参数来动态构建URL.这个变量部分被标记为 < variable-name>. ...

  9. [py]flask操作cookie&django的seesion和cookie机制

    浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...

随机推荐

  1. Docker笔记1:Docker 的介绍

    目  录 1.Docker 简介 2.Docker 特性 3.Docker 应用场景 4.Docker 优点 1.Docker 简介     Docker 提供了一个可以运行你的应用程序的封套(env ...

  2. 【手摸手,带你搭建前后端分离商城系统】01 搭建基本代码框架、生成一个基本API

    [手摸手,带你搭建前后端分离商城系统]01 搭建基本代码框架.生成一个基本API 通过本教程的学习,将带你从零搭建一个商城系统. 当然,这个商城涵盖了很多流行的知识点和技术核心 我可以学习到什么? S ...

  3. 安装两个Eclipse 版本不一致,高版本无法打开

    Could not create the JavaVirtual Machine,A fatal exception has occurred. 首先删除了 工作空间的配置 然后删除掉C:\Windo ...

  4. 谈谈FTP

    一.关于FTP 1.FTP是什么? FTP,全称"文件传输协议".属于TCP/IP四层模型中的应用层. 2.TCP/IP五层模型有哪些? 如图所示: 用文字叙述(从高层到底层): ...

  5. es 讲义

    链接: https://pan.baidu.com/s/193jObXs85OZcvAHDycUXlw 提取码: ewbp

  6. ElementUI级联选择器动态加载Demo

    嗯,今天项目遇到,弄了一会,这里分享一下,不足之处请小伙伴指出来, 官网Demo: <el-cascader :props="props"></el-cascad ...

  7. poj1011 Sticks (搜索经典好题)

    poj1011 Sticks 题目连接: poj1011 Description George took sticks of the same length and cut them randomly ...

  8. nrm切换npm源

    使用 nrm 提供了一些最常用的npm包镜像地址,能够让我们快速的切换安装包时候的服务器地址: 全局安装nrm包 npm i nrm -g 查看当前所有可用的镜像源地址以及当前所使用的镜像源地址 nr ...

  9. 源码安装中./configure的使用

    在linux中安装源码,在源码目录下使用 ./configure --prefix=xxx  --with=xxx 其中configure是一个可执行脚本, --prefix 选项就是配置安装的路径, ...

  10. 攻防世界-web2

    打开题目直接一梭子代码,给我们了个加密的密文,然我们解出flag 审计一波 先时将flag字符串逆序,然后每一个ascii码数值+1,然后base64加密,然后逆序,然后再rot13加密 得到加密的密 ...