有兴趣的朋友可以添加微信公众号:自动化测试实战

今天开始就要进入正题了。大家都准备好了吧~

代码提示

先和大家说个小知识点:有同学后台说输入flask代码pycharm不提示,现在告诉你一个解决方法:app = Flask(__name__)  # type: Flask在上面代码后面加上# type: Flask就会提示啦。

URL与视图函数的映射

url与视图函数的映射是通过@app.route()装饰器实现的

 

  • 1、只有一个斜杠代表的是根目录——首页。

# coding: utf-8

from flask import Flask

# __name__是用来确定flask运行的主文件
app = Flask(__name__)  # type: Flask
app.debug = True # app.config.from_object('configs') @app.route('/')
def hello_world():    return 'Hello World!' if __name__ == '__main__':
   app.run()

上面代码`@app.route('/')`装饰器传参只有一个斜杠/,这时候运行代码就会跳转到根目录——首页。如图:

  • 2、传参

URL传参是通过`<参数名称>`的形式进行传递。另外,URL中有几个参数,在视图函数中也要指定几个参数。参数名称可以自己定义,代码如下:

# coding: utf-8

from flask import Flask

# __name__是用来确定flask运行的主文件
app = Flask(__name__)  # type: Flask
app.debug = True # app.config.from_object('configs')
# 根目录
@app.route('/')
def hello_world():    return 'Hello World!' # 传参
@app.route('/content/<username>/<password>/') def login(username, password):    return u'我的用户名是:%s,密码是:%s' % (username, password) if __name__ == '__main__':
   app.run()

执行代码后,在浏览器输入你设置的地址可以看到:

需要注意的是,上面<>里面写的参数名称必须和你def函数里传参名称相同,比如我写的参数名叫username,那么我代码里login后面的形参名称必须叫username,上面代码我传了两个参数,地址写的时候分别传了warrior和123。

  • 3、URL的数据类型

1)如果没有指定,默认是string类型
2)string:字符串,接收任何没有斜杠/的字符。
3)int:整型
4)float:浮点类型
5)path:和string类似,但是可以接收斜杠/
6)uuid:只接收uuid字符串
7)any:可以指定多个路径

例如,现在我们指定一个参数为int类型:
# coding: utf-8

from flask import Flask

# __name__是用来确定flask运行的主文件
app = Flask(__name__)  # type: Flask
app.debug = True # 根目录
@app.route('/')
def hello_world():    return 'Hello World!' # @app.route('/content/<username>/<password>/')
# def login(username, password): #     return u'我的用户名是:%s,密码是:%s' % (username, password) @app.route('/content/<int:username>/<int:password>/')
def login(username, password):    return u'我的用户名是:%s,密码是:%s' % (username, password) if __name__ == '__main__':
   app.run()

在页面中我传入两个1,可以看到:

但是当我传入warrior和1以后就找不到页面了,因为warrior不是int类型:

uuid

接下来简单说一下uuid,因为uuid在传参的时候更长用,uuid就是唯一的一串字符,永远不会出现重复,比如:

# coding: utf-8

from flask import Flask
import uuid app = Flask(__name__)  # type: Flask
app.debug = True # 根目录
@app.route('/')
def hello_world():    return 'Hello World!' # @app.route('/content/<username>/<password>/')
# def login(username, password): #     return u'我的用户名是:%s,密码是:%s' % (username, password) @app.route('/content/<uuid:username>/')
def login(username):    return u'我的用户名是:%s' % (username) print uuid.uuid4() if __name__ == '__main__':
   app.run()

上面代码中我们先导入了import uuid模块,然后通过print uuid.uuid4()打印出了一串uuid:

这时候因为我们指定了username是uuid类型的,所以当我们进入http://127.0.0.1:5000/content/1/的时候就会找不到地址,我们将控制台打印的uuid替换1:http://127.0.0.1:5000/content/7bdcd04c-62fd-48e8-b12b-bbd636cd0315/就可以看到:

any

any就是指定传递的任意参数,比如下面代码我们指定传参为username或者blog,那么我们在URL中输入username或者blog都会链接到指定页面,输入any指定参数以外的内容页面则会报错:

# coding: utf-8

from flask import Flask
import flask
import uuid app = Flask(__name__)  # type: Flask
app.debug = True # 根目录
@app.route('/')
def hello_world():    return 'Hello World!' # @app.route('/content/<username>/<password>/')
# def login(username, password): #     return u'我的用户名是:%s,密码是:%s' % (username, password) @app.route('/content/<uuid:username>/')
def login(username):    return u'我的用户名是:%s' % (username) @app.route('/post/<any(username,blog):name>/')
def post_info(name):    return u'id是:%s' % name print uuid.uuid4() if __name__ == '__main__':
   app.run()

参数传递

最后我们来说一下参数传递。理论上推荐path——接收带斜杠的字符串形式传递参数,因为这样有利于网站的SEO即网站在搜索引擎结果的排名:

@app.route('/post/<path:username>/')
def user(username):    return u'用户名字是:%s' % username

另一种传参方式就是大部分网站在用的?path=1&username=warrior这种查询字符串的方式:

@app.route('/post/')
def question():    post_id = flask.request.args.get('post_id')
   return u'post_id是:%s' % post_id

上面flask.request.args.get('post_id')就是获取地址里的传参:

至于想用哪种方式,就看你是不是在乎自己网站在搜索引擎中的排名啦~

这一节内容稍微有点多,大家慢慢消化,最后把代码贴给大家,供大家参考:

# coding: utf-8

from flask import Flask
import flask
import uuid # __name__是用来确定flask运行的主文件
app = Flask(__name__)  # type: Flask
app.debug = True # 根目录
@app.route('/')
def hello_world():    return 'Hello World!' # @app.route('/content/<username>/<password>/')
# def login(username, password): #     return u'我的用户名是:%s,密码是:%s' % (username, password) # uuid
@app.route('/content/<uuid:username>/')
def login(username):    return u'我的用户名是:%s' % (username) # any
@app.route('/post/<any(username,blog):name>/')
def post_info(name):    return u'id是:%s' % name # path
@app.route('/post/<path:username>/')
def user(username):    return u'用户名字是:%s' % username # ?id=1&user=warrior形式传递参数
@app.route('/post/')
def question():    post_id = flask.request.args.get('post_id')
   return u'post_id是:%s' % post_id
   
   
print uuid.uuid4() if __name__ == '__main__':
   app.run()

flask第七篇——URL与视图函数的映射的更多相关文章

  1. URL与视图函数的映射

    今天跟大家讲的是URL与视图函数的映射 URL与视图函数的映射 url与视图函数的映射是通过@app.route()装饰器实现的. 1.只有一个斜杠代表的是根目录——首页. # coding: utf ...

  2. Python学习笔记整理总结【Django】【MVC/MTV/路由分配系统(URL)/视图函数 (views)/表单交互】

     一.Web框架概述  Web框架本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python # -*- coding:utf-8 ...

  3. django重点url,视图函数,模板语言

    django重点url,视图函数,模板语言url 1.django重点url无命名分组:re_path() 2.url第一个参:url未命别名分组就不需要views中参数一定,若命别名(?P<y ...

  4. 01_Django-介绍-项目结构-URL和视图函数

    01_Django-介绍-项目结构-URL和视图函数 视频:https://www.bilibili.com/video/BV1vK4y1o7jH 博客:https://blog.csdn.net/c ...

  5. Flask实战第6天:视图函数Response返回值

    视图函数的返回值会被自动转换为一个响应对象,Flask的转换逻辑如下: 如果返回的是一个合法的响应对象,则直接返回 可以使用make_response函数来创建Response对象,这个方法可以设置额 ...

  6. Flask最强攻略 - 跟DragonFire学Flask - 第七篇 Flask 中路由系统

    Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用 @app.route("/",methods=["GET","POST" ...

  7. Flask从入门到精通之在视图函数中处理表单

    在新版hello.py 中,视图函数index() 不仅要渲染表单,还要接收表单中的数据.更新后的index() 视图函数如下: @app.route('/') def index(): name = ...

  8. 6、Flask实战第6天:视图函数Response返回值

    视图函数的返回值会被自动转换为一个响应对象,Flask的转换逻辑如下: 如果返回的是一个合法的响应对象,则直接返回 可以使用make_response函数来创建Response对象,这个方法可以设置额 ...

  9. flask 第七篇 路由系统

    Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用 @app.route("/",methods=["GET","POST" ...

随机推荐

  1. 英语每日阅读---6、VOA慢速英语(翻译+字幕+讲解):性格沉静内向的人 能为社会创造更多价值

    英语每日阅读---6.VOA慢速英语(翻译+字幕+讲解):性格沉静内向的人 能为社会创造更多价值 一.总结 一句话总结: a.favor individual activities:Introvert ...

  2. layui弹窗宽度固定高度自适应界面

    //默认上下15px的边距高度,可根据需要修改function layuiDialogFitScreen(){ var layui_title_height=$(window.parent.docum ...

  3. linux命令详解(一)

    linux命令 在使用linux环境进行工作和学习中,我们更多时间是手指在键盘上跳动.这里,我们就来说linux命令使用吧在linux环境中,显然不能记下所有的命令及其使用规则,那么这时,man,he ...

  4. linux下如何安装lua

    1.下载lua包并解压 wget -c http://www.lua.org/ftp/lua-5.3.0.tar.gz  tar zxvf lua-5.3.0.tar.gz 2.下载libreadli ...

  5. UVALive-3523 Knights of the Round Table (双连通分量+二分图匹配)

    题目大意:有n个骑士要在圆桌上开会,但是相互憎恶的两个骑士不能相邻,现在已知骑士们之间的憎恶关系,问有几个骑士一定不能参加会议.参会骑士至少有3个且有奇数个. 题目分析:在可以相邻的骑士之间连一条无向 ...

  6. 小练习:补数 (Number Complement)

    1.eamples Input: Output: Explanation: The binary representation of (no leading zero bits), and its c ...

  7. hdu 1079 Calendar Game sg函数 难度:0

    Calendar Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  8. ElasticSearch6.0 高级应用之 多字段聚合Aggregation(二)

    ElasticSearch6.0 多字段聚合网上完整的资料很少 ,所以作者经过查阅资料,编写了聚合高级使用例子 例子是根据电商搜索实际场景模拟出来的 希望给大家带来帮助! 下面我们开始吧! 1. 创建 ...

  9. OC-NSString

    ========================== 面向对象编程进阶和字符串 ========================== Δ一.类的设计模式—单例 [单例]程序允许过程中,有且仅有一块内存 ...

  10. redis高级应用特征

    Redis高级应用特性 1.安全性 2.主从复制 3.事务处理 4.持久化机制 5.发布订阅消息 6.虚拟内存的使用 安全性 设置客户端连接后进行任何其他指定前需要使用的密码. 警告:因为redis速 ...