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. python3网络编程之socketserver

    本节主要是讲解python3网络编程之socketserver,在上一节中我们讲到了socket.由于socket无法支持多用户和多并发,于是就有了socket server. socket serv ...

  2. Redux源码分析之applyMiddleware

    Redux源码分析之基本概念 Redux源码分析之createStore Redux源码分析之bindActionCreators Redux源码分析之combineReducers Redux源码分 ...

  3. 查看ubuntu的内核版本&获取roo…

    1.查看内核版本命令 [root@AY130616190837708391Z ~]# cd .. (管理员权限) [root@AY130616190837708391Z /]# cd proc [ro ...

  4. MongoDB3.4安装配置以及与Robomongo1.1的连接——解决Authentication Failed导致的不能连接问题

    本文环境:win10(64)+MongoDB(3.4.5)+Robomongo(1.1) 目录: MongoDB的安装 MongoDB的配置 Robomongo的安装以及与MongoDB的连接 一些新 ...

  5. RabbitMQ入门-Topic模式

    上篇<RabbitMQ入门-Routing直连模式>我们介绍了可以定向发送消息,并可以根据自定义规则派发消息.看起来,这个Routing模式已经算灵活的了,但是,这还不够,我们还有更加多样 ...

  6. NYOJ--491--dfs(打表水过)--幸运三角形

    /* Name: NYOJ--491--幸运三角形 Author: shen_渊 Date: 15/04/17 16:26 Description: DFS超时,深搜出第一行的所有情况,计算之后打表水 ...

  7. 解读 Vue 之 Reactive

    本文同步发表在 https://github.com/whxaxes/blog/issues/7 前言 在一篇文章中简单讲了 vue 是如何把模板解析成 render function 的,这一篇文章 ...

  8. 8. Andrénalin ★ Serial

    无花无壳爆破/硬编码 istcmp字符串比较 "<BrD-SoB>" 仅允许非商业转载,转载请注明出处

  9. VIM的字符编码设置

    vim 编码方式的设置和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2.UTF-8 等流行的 Unicode 编码方式.然而不幸的是,和很多来自 Linux ...

  10. ubuntu 15.10 安装jdk

    转http://www.bkjia.com/xtzh/881605.html 第一步,下载Linux版JDK 可以通过访问Oracle官网下载,或者直接通过命令行下载. lxh@ubuntu:~$ w ...