1 提出问题

  如何实现前端传过去的路径时动态的(即:多个url对应一个url视图函数)

  例如:

    浏览器中输入  http://127.0.0.1:5000/test/good/  或者  http://127.0.0.1:5000/test/fury/ 时,在后台执行的都是同一个url视图函数

2 解决问题

  利用flask的转换器实现  

  2.1 什么是转换器

    @app.route('/test/<string:let>/', endpoint="test01") 中 <> 的部分就叫做转换器

      代码解释:路径的最后一部分可以是任意值,但是这个值得类型必须是string类型

    

from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "这是主页面, hello" @app.route('/test/<string:let>/', endpoint="test01")
def test(let):
return "多个url对应一个url视图函数 " + let print(app.url_map)
if __name__ == "__main__":
app.run(debug=True)

  2.2 转换器的种类

    default  默认转换器(注意:默认转换器就是字符串转换器)

    string  字符串转换器,不能识别  /

    path  路径转换器,可以看成是string转换器的加强版,可以识别  /

      点睛:我们在访问静态文件时之所以可以通过路径进行访问,是因为静态文件的转换器时path类型

    int  整型转换器

    float  浮点型转换器

      点睛:int转换器只能识别整数,float转换器只能识别浮点型

      点睛:在url视图函数中会自动将获取到的数据转换成相应的类型

    any  多选一类型转换器

    uuid  UUID类型转换器

      点睛:在url视图函数中获取到的数据时UUID类型

      点睛:如何获取uuid

        form uuid import uuid4

        uuid4()

        注意: uuid4() 返回的是一个UUID类型的类

from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "这是主页面, hello" @app.route('/test/<string:let>/', endpoint="test01")
def test(let):
return "字符串类型转换器 " + let @app.route('/test/<let>', endpoint='test02')
def test(let):
return "默认类型转换器 " + let @app.route('/test/<path:let>/', endpoint='test03')
def test(let):
return "path类型转换器 " + let @app.route('/test/<int:let>/', endpoint='test04')
def test(let):
return 'int类型转换器 ' + str(let) @app.route('/test/<float:let>/', endpoint='test05')
def test(let):
return 'float类型转换器 ' + str(let) @app.route('/test/<any(fury,zeus,"123","12.34"):let>/', endpoint='test06')
def test(let):
return 'any类型转换器 ' + let @app.route('/test/<uuid:let>/', endpoint='test07')
def test(let):
return 'uuid雷翔转换器 ' + let print(app.url_map)
if __name__ == "__main__":
app.run(debug=True)

3 提出问题

  如何根据端点去寻找路径

4 解决问题

  通过反转的方式实现

  补充知识点:url和url视图函数是怎么对应的

    flask中url跟视图函数并不是直接对应的,而是有一个中间者-endpoint

    url  ->  endpoint  ->  view_function

      根据url找到对应的端点,在根据对应的端点找到url视图函数;素以端点时url和url视图函数之间的桥梁,所以我们可以根据端点找到对应的路径  

  4.1 如何通过 url_for 方法来获取路径

    4.1.1 从flask模块中引入url_for

      from flask import url_for

    4.1.2 利用 ur_for 获取路径

      path = url_for('myTest')

    

from flask import Flask
from flask import url_for
app = Flask(__name__)
@app.route('/')
def index():
path = url_for('myTest')
print(path)
return '这里还是主页'
@app.route('/test/', endpoint='myTest')
def test():
return '这里是测试页面'
print(app.url_map)
if __name__ == '__main__':
app.run()

  4.2 url_for 小应用

    把通过端点获取到的路径放到一个html中去,这样无论如何修改url路径,只要端点不变那么就不用修改html中的路径

from flask import Flask
from flask import url_for
app = Flask(__name__)
@app.route('/')
def index():
path = url_for('myTest')
print(path)
html = '''
<a href="%s">点击进入测试页面</a>
'''%path
return html
@app.route('/test/', endpoint='myTest')
def test():
return '这里是测试页面'
print(app.url_map)
if __name__ == '__main__':
app.run(debug = True)

  4.3 通过蓝图的端点获取蓝图路径

    和普通路由的区别:蓝图的端点在前面需要加上蓝图名

from flask import Flask
from flask import url_for
from flask import Blueprint app = Flask(__name__) bp = Blueprint('movie', __name__)
@bp.route('/action/', endpoint='actionMovie')
def action():
return '动作电影专区' app.register_blueprint(bp) @app.route('/')
def index():
path = url_for('movie.actionMovie')
print(path)
html = '''
<a href="%s">点击进入动作电影</a>
'''%path
return html
@app.route('/test/', endpoint='myTest')
def test():
return '这里是测试页面'
print(app.url_map)
if __name__ == '__main__':
app.run(debug = True)

  4.4 带变量的路径反转

from flask import Flask
from flask import url_for app = Flask(__name__) @app.route('/')
def index():
path = url_for("test01", let='fury')
return '这是主页 ' + path @app.route('/test/<string:let>/', endpoint="test01")
def test(let):
return '测试页面 ' + let; print(app.url_map) if __name__ == '__main__':
app.run(debug = True)
from flask import Flask
from flask import url_for app = Flask(__name__) @app.route('/')
def index():
path = url_for("test01", let='fury', name='zeus')
return '这是主页 ' + path @app.route('/test/<string:let>/', endpoint="test01")
def test(let):
return '测试页面 ' + let; print(app.url_map) if __name__ == '__main__':
app.run(debug = True)

5 控制请求方式

  5.1 请求方式

    POST GET HEAD OPTIONS

      点睛:有get就默认有head,options永远都有

  5.2 如何修改请求方式

    注意:默认情况下有三种请求方式

      

    

  5.3 如何通过python实现请求

    利用pip安装requests包

      pip install requests

    导入相关方法

      from requests import get, post, head, options
    调用相关方法
      resp = get(url)

    查看相应头部信息

      resp.headers

    查看响应实体信息
      resp.content.decode('utf-8')

    

Flask01 路由控制(转换器)、反转、请求方法控制的更多相关文章

  1. Flask03 路由控制(转换器)、反转、请求方法控制

    1 提出问题 如何实现前端传过去的路径时动态的(即:多个url对应一个url视图函数) 例如: 浏览器中输入 http://127.0.0.1:5000/test/good/ 或者 http://12 ...

  2. Nginx优化防爬虫 限制http请求方法 CDN网页加速 架构优化 监牢模式 控制并发量以及客户端请求速率

    Nginx防爬虫优化 Robots协议(也称为爬虫协议,机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可 ...

  3. IOS中tableView每组的头部控件、通过tableView的代理方法控制某一行的cell能否达到高亮选中状态

    一.tableView每组的头部控件 1.控件宽度默认就是tableView的宽度 2.控件高度由下面的代理方法决定 - (CGFloat)tableView:(UITableView *)table ...

  4. ESP8266固件修改可以控制多个IO方法

    之前在论坛上找到了一个通过ESP8266可以控制GPIO0的固件和app,但是自己做的家庭影音灯光系统是需要控制多个IO从而控制STM32.通过观看大明的视频,了解了GPIO的控制方法. 在固件的ap ...

  5. 基于hi-nginx的web开发(python篇)——动态路由和请求方法

    hi.py的提供的路由装饰器接受两个参数,第一个参数指定动态路由的正则模式,第二个参数指定同意的http请求方法列表. 比如: @app.route(r"^/client/?$", ...

  6. php控制访问人数的方法

    php控制访问人数的方法 <pre>//添加访问人数 public function addfangwen() { header("Content-type:text/html; ...

  7. Spring下的@Order和@Primary与javax.annotation-api下@Priority【Spring4.1后】等方法控制多实现的依赖注入(转)

    @Order 可以作用在类.方法.属性. 影响加载顺序. 若不加,spring的加载顺序是随机的. @Primary 当注入bean冲突时,以@Primary定义的为准. @Order是控制配置类的加 ...

  8. HTTP请求响应报文&&相关状态码&&GET_POST请求方法 总结

    HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行   请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GE ...

  9. 微信小程序数据请求方法wx.request小测试

    微信小程序数据请求方法 wx.request wxml文件: <view> <textarea value="{{textdata}}"/> </vi ...

随机推荐

  1. MySQL学习笔记(三):常用函数

    一:字符串函数 需要注意的几个细节: 1.cancat中有一个字符串为null,则结果为null. 2.left(str,x) 和 right(str,x)中x为null,则不返回任何字符串,不是nu ...

  2. 小程序server-3-搭建WebSocket 服务

    小程序server-3-搭建WebSocket 服务: 1.安装 Node 模块 使用 ws 模块来在服务器上支持 WebSocket 协议,下面使用 NPM 来安装: cd /var/www/wxp ...

  3. 微信小程序(有始有终,全部代码)开发--- 新增模块: 图片选取以及拍照功能

    开篇语 前几天发了一篇: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 后来又发了BUG修复的版本: 简年18: 微信小程序(有始有终,全部代码)开发 ...

  4. linux--软件包管理工具

    linux平台软件包管理: RPM/DPKG 两大阵营简介 在 GNU/Linux( 以下简称 Linux) 操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM ...

  5. <Mastering KVM Virtualization>:第三章 搭建独立的KVM虚拟化

    在第二章,你了解了KVM的内部结构:在本章中,您将了解如何将Linux服务器设置为虚拟化主机.我们正在讨论将KVM用于虚拟化并将libvirt作为虚拟化管理引擎. KVM开启了虚拟化并利用你的服务器或 ...

  6. 2017年05月10日记一次微项目投产 | 安卓版微信内置浏览器不能解析gzip压缩过的mp4视频的问题

    前言 今天投产了一个小项目,一个很简单的H5,有播放视频功能,使用了videojs插件. 之前也做过数个视频播放,视频的转压都按照既定流程进行,文件放到FTP后,iphone和安卓机测试下来都没有问题 ...

  7. 【NO.5】jmeter-结果文件

    Jmeter的结果文件可以保存很多内容,你需要看哪个就勾选哪个,很简单是吧. 结果文件可以保存为2种形式:XML或者CSV.我印象里在书上提到过,如果保存为XML形式的结果文件,后续可以转化为表格便于 ...

  8. 在CentOS 6上安装Apache和PHP

    本文演示如何在CentOS 6上安装Apache和PHP.CentOS 6自带的是Apache 2.2.3和PHP 5.1.6,您可以使用默认的CentOS包管理器进行安装yum.使用yum(而不是使 ...

  9. 优秀开源软件学习系列(一)——从零学习Spring4以及学习方法分享

    一.目的1.掌握Spring4怎样使用,以便将这个框架作为自己的一项技能.2.掌握Spring官网是怎样介绍其产品的,在心中对Spring有最官方的.最直观的了解.在Spring的相关领域,能够知道怎 ...

  10. Sql Server数据库使用触发器和sqlbulkcopy大批量数据插入更新

    需要了解的知识 1.触发器 2.sqlbulkcopy 我的用途 开发数据库同步的工具,需要大批量数据插入和数据更新. 方式 使用SqlBulkCopy类对数据进行数据批量复制,将需要同步数据的表新建 ...