今天跟大家讲的是URL与视图函数的映射

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')就是获取地址里的传参:

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

这一篇内容稍微有点多,大家慢慢消化,最后把代码贴给大家,供大家参考:
如果对软件测试、接口测试、自动化测试、面试经验交流。感兴趣可以加软件测试交流:1085991341,还会有同行一起技术交流。

# coding: utf-8
from flask import Flask
import flaskimport 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()

以上内容希望对你有帮助,有被帮助到的朋友欢迎点赞,评论。

URL与视图函数的映射的更多相关文章

  1. flask第七篇——URL与视图函数的映射

    有兴趣的朋友可以添加微信公众号:自动化测试实战 今天开始就要进入正题了.大家都准备好了吧~ 代码提示 先和大家说个小知识点:有同学后台说输入flask代码pycharm不提示,现在告诉你一个解决方法: ...

  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. 关于:url、视图函数、模板3者之间参数传递的理解

    url获取参数的途径有2个: 1.url中的变量,设置在URL地址中. 2.url中添加字典,设置在URL地址外. urlpatterns = [ path('<year>/<int ...

  6. 2.-url和视图函数

    一.URL-结构 1.定义:统一资源定位符 Uniform Resource Locator 2.作用:用来表示互联网上某个资源地址 3.URL的一般语法格式为(注:[]代码其中的内容可以省略): 格 ...

  7. 【Python】Flask系列-URL和视图笔记

    1.学习目标 熟悉Flask相关知识. 熟悉web开发流程. 能独立开发Flask项目. 2.环境配置 Python虚拟环境安装 因为python的框架更新迭代太快了,有时候需要在电脑上存在一个框架的 ...

  8. Flask学习 url和视图

    因为扫描器的准备使用Flask框架,所以开始恶补Flask和前后端的知识 Flask是一个使用Python编写的轻量级Web应用框架,作者是 Armin Ronacher(他也是 Werkzeug 及 ...

  9. django url配置-反向解析-视图函数-HttpRequest对象-HttpResponse对象-cookies-session-redis缓存session

    """ --视图概述:-- 作用:视图接受WEB请求,并响应WEB请求 本质:视图就是一个python中的函数 响应: 1.网页: 一.重定向 二.错误视图 400,50 ...

随机推荐

  1. PHP zip_open() 函数

    定义和用法 zip_open() 函数打开 zip 档案以供读取.高佣联盟 www.cgewang.com 如果成功,该函数则返回 zip 文件资源.如果失败,则返回 FALSE. 语法 zip_op ...

  2. 【问题记录】springMVC @Valid使用不生效问题

    问题描述 在网上找到如何使用@Valid注解后,就把用到的配置和jar包加上,然后测试发现一直不生效.下面是配置及解决方法 配置 1.引入依赖 2.添加相应的配置(springmvc配置文件) < ...

  3. [NOI2012]随机数生成器【矩阵快速幂】

    NOI2012 随机数生成器 题目描述 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法 ...

  4. vue cli4构建基于typescript的vue组件并发布到npm

    基于vue cli创建一个vue项目 首先安装最新的vue cli脚手架, npm install --global @vue/cli npm WARN optional SKIPPING OPTIO ...

  5. 用Python来搞副业?这届大学生到底有多野……

    最近,我在知乎上偶然发现一个有意思的问题: 「大学生实习被当作廉价劳动力,你怎么看?」 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很 ...

  6. 可读流 - nodejs stream总结

    可读流 包含的事件:data,readable,end,close ,error,pause,resume 常用方法:resume,read,pipe,pause 客户端的 HTTP 响应 服务器的 ...

  7. Docker初探之运行MySQL

    在实际的开发中使用MySQL的也不少,如果要想在Docker中使用MySQL,那么第一步就需要拉取MySQL镜像. 一.拉取MySQL镜像 命令: docker pull mysql 如图: 拉取的是 ...

  8. 主成分分析PCA数据降维原理及python应用(葡萄酒案例分析)

    目录 主成分分析(PCA)——以葡萄酒数据集分类为例 1.认识PCA (1)简介 (2)方法步骤 2.提取主成分 3.主成分方差可视化 4.特征变换 5.数据分类结果 6.完整代码 总结: 1.认识P ...

  9. 将本地项目推送到远程gitee仓库(通过git命令)

    只有经历过地狱般的磨砺,才能练就创造天堂的力量: 只有流过血的手指,才能弹出世间的绝响 将本地的项目推送到远程gitee仓库 本地新建的Java项目,想推送到远程gitee仓库或者git仓库,你需要两 ...

  10. 【算法•日更•第三十九期】迭代加深搜索:洛谷SP7579 YOKOF - Power Calculus 题解

    废话不多说,直接上题: SP7579 YOKOF - Power Calculus 题意翻译 (略过没有营养的题干) 题目大意: 给出正整数n,若只能使用乘法或除法,输出使x经过运算(自己乘或除自己, ...