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')

    

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

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

    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. 《程序员代码面试指南》第三章 二叉树问题 Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题

    题目待续.... Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题 java代码

  2. runtime-分类为什么不生成setter和getter

    前言 前几天有人问我一个问题:为什么分类不能自动创建get set方法.老实说,笔者从来没有去思考过这个问题.于是这次通过代码实践跟runtime源码来探究这个问题. 准备工作 为了能减少输出类数据的 ...

  3. [原创]java WEB学习笔记27:深入理解面向接口编程

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  4. hiho一下 第四十九周 题目1 : 欧拉路·一【无向图 欧拉路问题】

    题目1 : 欧拉路·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最 ...

  5. Java大坑之Integer对象比较相等

    public class IntegerTest { /*** * 对于Integer var = ? 在 -128到127之间的复制,Integer对象是在IntegerCache.cache产生 ...

  6. 关于 haproxy keepalived的测试

    可以阅读的一篇文章(http://blog.csdn.net/xyang81/article/details/52554398) 以下测试的配置都是基本的,简单化的,达到了效果滴,没有参考上面文档 准 ...

  7. CentOS下查看MySQL的安装路径

    Linux下查看mysql.apache是否安装,并卸载. 指令 ps -ef|grep mysql 得出结果 root     17659     1  0  2011 ?        00:00 ...

  8. Cocos2d-x中常用宏的作用

    1. CC_SYNTHESIZE(int, nTest, Test); 相当于: protected: int nTest; public: virtual nTest getTest(void) c ...

  9. django 实现分页功能

    分页效果: 视图代码: # -*- coding: utf-8 -*- from django.shortcuts import render,get_object_or_404 from djang ...

  10. javascript时间戳转换成指定格式的日期

    //时间戳转换成指定格式的日期DateTool.IntDatetimeTo = function(time, format){    var testDate = new Date(time);    ...