flask第十篇——url_for【3】

继续url_for的知识点

# coding: utf-8

from flask import Flask, url_for
import flask

app = Flask(__name__)  # type: Flask
app.debug = True

# 根目录
@app.route('/')
def hello_world():

    return 'Hello World!'

@app.route('/login/<page_id>/')
def login(page_id):
    return u'登录页面'

@app.route('/list/')
def mylist():
    return url_for('login', page_id=1, title_id=2)

if __name__ == '__main__':
    app.run()

现在我们在mylist函数中的url_for多传一个参数,这时候会返回什么结果呢,执行代码可以看到:

看上面的代码,如果现在我想在login函数中获取title_id,该怎么获取呢?我们之前已经写过的,我们可以通过修改login函数:

@app.route('/login/<page_id>/')
def login(page_id):
    title_id = flask.request.args.get('title_id')
    return title_id

这样,在页面访问127.0.0.1:5000/login/2/页面显示的就是title_id。

现在我们来说url_for的另一个优点,就是它会自动对你传递的内容进行编码:

# coding: utf-8

from flask import Flask, url_for
import flask

app = Flask(__name__)  # type: Flask
app.debug = True

# 根目录
@app.route('/')
def hello_world():

    return 'Hello World!'

@app.route('/login/<page_id>/')
def login(page_id):
    return u'登录页面'

@app.route('/list/')
def mylist():
    return url_for('login', page_id=1, title_id='/')

if __name__ == '__main__':
    app.run()

上面代码中,我们在mylist函数中给login函数传了一个`title_id='/'`,然后页面中看到:

页面对/进行了ASCII编码,/变成了%2F。这种机制就避免了url的混乱,比如我们地址是127.0.0.1:5000/login/,后面查询字符串中含有/,那地址就成了类似127.0.0.1:5000/login//这种url形式明显是错误的,但是如果我们用url_for,那么地址 就会自动转换为127.0.0.1:5000/login/%2F,如此一来就避免了url的错乱。

大家千万不要忽视函数上面的@app.route(),找了好几个代码显示样式,就是怕大家忽视这个问题。

原文发布于微信公众号 - 自动化测试实战(gh_839e78b6ba28)

原文发表时间:2018-03-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

Linux中的pushd和popd

其实,很早就知道pushd和popd在Linux中可以用来方便地在多个目录之间切换。那时比较浮躁,感觉切换目录没必要这么复杂。在实际中,发现通过使用pushd...

1322
来自专栏吴伟祥

Linux下的shell简介(三) 原

        shell的本意是“壳”的意思,其实已经很形象地说明了shell在Linux系统中的作用。shell就是围绕在Linux内核之外的一个“壳”程序...

903
来自专栏java学习

Java入门基础题目练习

《Java基础入门》课后习题 第1章 Java开发入门 一、填空题 1、Java的三大体系分别是______、_____、______。 2、Java...

3674
来自专栏哲学驱动设计

OEA ORM 框架中的冗余属性设计

OEA 框架提供了多种方式来优化分布式数据查询的性能,本篇将会说明如何以声明 OEA 冗余属性的方式,来实现轻量级的数据冗余,以减少关联查询次数及网络数据传输量...

2339
来自专栏未闻Code

Tenacity——Exception Retry 从此无比简单

Python 装饰器装饰类中的方法这篇文章,使用了装饰器来捕获代码异常。这种方式可以让代码变得更加简洁和Pythonic。

1701
来自专栏LEo的网络日志

python技巧分享(五)

28810
来自专栏大史住在大前端

webpack4.0各个击破(8)—— tapable篇

tapable是webpack的核心框架(4.0以上版本的API已经发生了变化),是一个基于事件流的框架,或者叫做发布订阅模式,或观察者模式,webpack的整...

1283
来自专栏C/C++基础

C/C++头文件的作用和用法

示例代码编译运行环境:Windows 64bits+VS2017+Debug+Win32。

1101
来自专栏Java帮帮-微信公众号-技术文章全总结

day27.MongoDB【Python教程】

集合:类似于关系数据库中的表,储存多个文档,结构不固定,如可以存储如下文档在一个集合中

1103
来自专栏从零开始学自动化测试

pytest文档19-doctest测试框架

doctest从字面意思上看,那就是文档测试。doctest是python里面自带的一个模块,它实际上是单元测试的一种。 官方解释:doctest 模块会搜索那...

1392

扫码关注云+社区

领取腾讯云代金券