Flask理论基础(一)视图函数和URL反转函数(url_for)
一、视图函数
1.1 基本用法
试图函数是 app.route 或者 bp.route(蓝图)装饰器装饰的函数。该函数实现了对URL路径的转换,也就是路由功能,例如下面代码定义了默认url ‘/’ 和‘/index/’的url请求。
@app.route('/')
@app.route('/index/')
def hello_world():
return 'hello world'
试图函数可以指定http请求方法,在route装饰器中传入methods参数
@app.route('/login/',methods=['GET','POST'])
1.2 传参数
试图函数匹配一个具体的url请求,很多时候需要传入一个参数,例如传入当前页面编号
@app.route('/article_list/<int:page>/')
def article_list(page):
return "你查看到第 %s 页" % page
# http://127.0.0.1:5000/article_list/3
如上传入int型参数page,在url请求时将自动为page赋值3;
视图函数的参数类型支持string,int,float,path,uuid,any 6种参数转换,其中string时默认转换器(缺省状态下默认调用)。
@bp.route('/user/<username>')
@login_required
def user(username):
user = User.query.filter_by(username=username).first_or_404()
如上调用缺省的string转换器将url匹配的内容以字符串形式传递给username变量。
path转换器类似string,但可以传入文件路径分隔符‘/’。uuid转换器接受一个uuid字符串并自动换换为python对象。
any 转换器提供了一个map,让一个视图函数可以匹配两个不同的路径。
@app.route('/<any(about, help, imprint, class, "foo,bar"):page_name>')
def detail(page_name):
if page_name == 'about':
return 'about page'
else:
...
多参数匹配,如下搜索代码查询word结果的页面。
@app.route('/<wrod>/<int:page>')
def search(word,page):
return []
1.3 自定义转换器
Flask提供的转换器能够解决绝大部份需求了,但总有奇葩需求需要处理,这就需要自定义转换器了。
自定义转换器需要如下三步操作:
1)继承BaseConverter实现自己的转换器:
from werkzeug.routing import BaseConverter
class MapConverter(BaseConverter): def to_python(self, values):
"""
将url中的参数转换为我们需要的数据类型
a:b;c:d;
"""
# 通过字符串创建字典类型数据
kvs = values.split(';')
res =[]
for kv in kvs:
(k,v) = kv.split(':')
res[k,v]
return res def to_url(self, values):
"""
将字典类型数据{'a':'b','c':'d'}转换成a:b;c:d;
"""
# BaseConverter.to_url是对url进行编码
res = ';'.join([BaseConverter.to_url(self, k+':'+values[k]) for k in values.keys()])
return res
如上,需要实现to_python 和to_url两个方法,分别代表字符串与python对象之间的转换
2)告诉flask我需要添加一个转换器:
app.url_map.converters['map'] = MapConverter
3) 开始使用
@app.route('/detail/<list:params>/')
def detail(params):
print 'parmas:%s' % params
return 'success for url'
with app.test_request_context():
print 'detail函数的url是:%s' % flask.url_for('detail', params=[1, 2, 3])
二、URL反转函数
指将视图函数转换为具体url的函数;
url_for(endpoint, **values)
第一个参数endpoint指的是视图函数名称对应的字符串,第二个参数可选,为需要传入的url的参数。
例如:
@app.route('/')
def hello_world():
print(url_for('my_list',page=1))
return 'hello world'
@app.route('/list/<page>')
def my_list(page):
return 'my_list'
如上第三行url_for 第一个参数为试图函数my_list字符串,方法接受一个page参数最终打印的结果如下:
/list/1
如果为第三行的url_for 多加一个参数count
print(url_for('my_list',page=1,count=2))
则打印结果
/list/1/?count = 2
同时url_for 会自动处理特殊字符串。
2.1、反转函数在模板中的使用
在模板中也可以使用url_for 例如:
<a href="{{ url_for('login') }}">登录</a>
在html头部经常需要引入一些静态文件,此时url_for的endpoint传入static , filename 传入相对路径
<script src="{{ url_for('static', filename='js/index.js') }}"></script>
static目录与templates目录同级。
2.2、如何获取URL全路径
如上url获取的参数都是相对于当前应用的相对路径,url_for 也可获取到相对网站的绝对路径?
例如我们的网站在本地 http://127.0.0.1 访问,我们想通过获取完整的http://127.0.0.1/list/1 可以在url_for 方法中添加 _external=True参数
{{ url_for('reset_password', token=token, _external=True) }}
如上是重置密码的邮件中的一行文本,在我们发送重置密码的邮件时,需要发送一个绝对路径,添加_external=True即可。
Flask理论基础(一)视图函数和URL反转函数(url_for)的更多相关文章
- flask中的重定向,渲染,反转视图函数
在学习flask中,重定向,渲染,反转老是不怎么明白,今天明白了其中的点了,来给大家分享下 rend_templete()这个函数就是一个渲染的作用,渲染html的东西. url_for是反转视图函数 ...
- Flask初学者:视图函数和类视图
当一个url请求进入后台时,一般有两种方式来进行处理:视图函数和类视图.视图函数直接使用一个函数来进行处理并返回数据给浏览器,类视图则是使用类来进行处理并返回的,所以当需要进行的处理比较简单,则可以考 ...
- flask学习(七):URL反转
1. 什么叫反转URL:从视图函数到url的转换叫做反转url 2. 反转url的用处: 1) 在页面重定向的时候,会使用url反转 2) 在模板中,也会使用url反转 3. 实例: 打印出了url
- flask 之(二) --- 视图|模版|模型
Flask框架 打开pycharm编译器,新建一个Flask项目,选择提前建好的虚拟环境 . 项目结构: static:静态资源文件,可以直接被浏览器访问 templates:模版文件,必须在项目的p ...
- flask之三:视图高级
视图高级 app.route和app.add_url_rule app.add_url_rule app.add_url_rule('/list/',endpoint='myweb',view_fun ...
- flask路由和视图和cookie
什么是路由 """ 客户端(例如web浏览器)把请求发送给Web服务器,Web服务器再把请求发送给Flask程序实例. 程序实例需要知道对每个URL请求运行那些代码,所以 ...
- flask第一章 flask启动 路由视图 FlaskRequest jinja2 FlaskSession
一.简单了解flask web框架 优点: 小而精,组件只有session,第三方机构强烈支持flask,极其简单 缺点: 由于第三方软件的关系,稳定性相对较差,flask-session 扩展知识: ...
- Flask即插视图与tornado比较
由于公司使用了Tornado框架和Flask框架,之前一直使用的都是Flask框架,已经对url下面紧跟着视图的写法很固执.刚开始接触Tornado框架,对于其url和视图分开的写法思想上无法转变.今 ...
- Flask基础(06)-->视图常用逻辑
Flask基础(06)-->视图常用逻辑 返回json 重定向:url_for 自定义状态码 返回json:在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中 ...
随机推荐
- linux python2.6升级2.7
一.升级 Python 2.7.10 版本 1. 准备安装包,系统是最小化安装 # 下载安装依赖的相关包[root@vip ~]# yum install vim gcc make wget -y [ ...
- 欧拉函数(Euler_Function)
一.基本概述在数论,对正整数n,欧拉函数varphi(n)是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商 ...
- 如何通过cmd命令远程重启或远程关闭Windows服务器
一.想要远程控制服务器,前提条件是远程服务器需要开启IPC$ ,且本地能访问远程服务器445端口 1.开启ipc$ net share IPC$ 2.如果只指定管理员才有执行ipc$的权限 net s ...
- asp.net Mvc 增删改查
1.创建项目 已经创建好项目了 2.创建数据库 使用这个数据库或者自己创建一个数据库,一个表就好,简单 USE [LearnAdminlte] GO /****** Object: Table [db ...
- 重视项目排期,对dateline 有所敬畏
项目排期 = 个人任务完成 + 风险预估 + 意外情况 + 项目上下游依赖 个人任务完成 个人任务具体话 不要考虑私人情感,专注工作 风险预估 对可能出现的情况进行考虑 意外情况 对出现的意外情况提前 ...
- 【基础】Linux软件安装方法
linux中wget .apt-get.yum rpm区别 wget 类似于迅雷,是一种下载工具, 通过HTTP.HTTPS.FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理 名字是Wo ...
- 【原理】RabbitMQ架构图
Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输, Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列. Queue:消息 ...
- PHP ftp_get() 函数
定义和用法 ftp_get() 函数从 FTP 服务器上下载一个文件并保存到本地一个文件中. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 ftp_get(ftp_connec ...
- Android中怎么破解游戏之修改金币数
我们在玩游戏的时候总是会遇到一些东东需要进行购买的,但是我们可能又舍不得花钱,那么我们该怎么办呢?那就是用游戏外挂吧!我们这里说的是Android中的游戏,在网上搜索一下移动端游戏外挂,可能会找到一款 ...
- mac os 下安装mysql
在 http://dev.mysql.com/downloads/mysql/ 选择下载mysql 注册并选择相应的版本后,得到下载链接:: wget http://dev.mysql.com/get ...