首页 > 其他分享 >flask框架路由url转换器用法

flask框架路由url转换器用法

时间:2022-10-13 17:33:15浏览次数:37  
标签:__ flask value python url def id 路由


 app.route('url')中支持string,int,float,path等类型,隐形支持正则。

实现flask支持正则的步骤

1  定义正则类,继承BaseConverter

from werkzeug.routing import BaseConverter

class ReConverter(BaseConverter):

def __init__(self,url_map,*args):
super().__init__(url_map)
self.regex = args[0]

2 把正则类赋值给我们定义的正则规则

app.url_map.converters["re"] = ReConverter

3 在路由中使用正则

@app.route("/<re('\d{4}'):id>")
def index(id):
return "hello id=%s" %id

补充:

在定义转换器类时,我们通常还遇到两种方法:to_python,to_url

举例代码如下:

from flask import Flask, url_for
from werkzeug.routing import BaseConverter

app = Flask(__name__)


class ReConverter(BaseConverter):

def __init__(self,url_map,*args):
print("调用__init__")
super().__init__(url_map)
self.regex = args[0]

def to_python(self, value):
# 正则提取到的数字一般并不是就直接交给视图函数处理,而是交给to_python,进过to_python处理
print(u"调用to_python value=%s"%value)
return "4564"
def to_url(self, value):
# 反向解析先调用该函数
print(u"调用to_url value=%s"%value)
return value

app.url_map.converters["re"] = ReConverter



@app.route("/<re('\d{4}'):id>")
def index(id):
return "hello id=%s" %id

@app.route("/")
def url():
return '<a href="%s">链接</a>' % url_for('index',id="1234")


if __name__ == '__main__':
app.run(port=5003)

当我们调用to_python时,函数执行的是首先装饰器正则匹配提取出id ,然后id当成value传给to_python ,经to_python处理交给视图函数

当我们通过反向解析传递函数时,首先url_for 传递给函数to_url,to_url函数对传入value值进行处理交给装饰器,然后重复to_python步骤。

标签:__,flask,value,python,url,def,id,路由
From: https://blog.51cto.com/u_15828115/5754440

相关文章

  • 操作URL的黑科技
     处理URL的query的接口:URLSearchParams//处理URL的query的接口:URLSearchParams//简单使用leturl='?wd=胡歌&love=fx&year=2020';letsearchParams=newURLSearchPar......
  • Vue3动态路由
    1、引入router: import{useRouter}from'vue-router'2、定义letrouter=useRouter();3、动态添加路由router.addRoute({name:"users",path:'/User/users'......
  • Flask 学习-88. jsonify() 函数源码解读深入学习
    前言flask有个jsonify()函数,如果返回的是一个字典,那么调用jsonify创建一个响应对象。关于响应视图函数的返回值会自动转换为一个响应对象。如果返回值是一个字符串......
  • js获取url参数方法
    _gup(name,url,encode){if(!url)url=location.href;name=this.encrypt(name,encode);name=name.replace(/[\[]/,"\\[").replace(/[\]]/,"......
  • postman中 form-data、x-www-form-urlencoded的区别
    1、form-data:就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会......
  • HCIA学习笔记三十三:缺省路由
    一、缺省路由• 缺省路由是一种特殊的路由,可以通过静态路由配置,某些动态路由协议也可以生成缺省路由,如OSPF和IS-IS。• 在路由表中,缺省路由以到网络0.0.0.0(掩码为0.0.0......
  • HTML url编码参照表
    出处:https://www.w3school.com.cn/tags/html_ref_urlencode.asp一些常用的#%23space%20回车%0d换行%0a......
  • Flask学习笔记(十二)-Flask-Migrate实现数据库迁移详解
    一、定义flask-migrate是基于Alembic的一个封装,并集成到Flask中所有的迁移操作其实都是Alembic做的,能跟踪模型的变化,并将变化映射到数据库中。二、Flask-Migrate安装......
  • qiankun+vue,为什么我的子应用的子路由老是跳404?这么解决
    主要解决子应用内部跳转路由时,跳到404页的问题你能搜这个,我姑且认为你基本配置已经好了,而且主跳子的一级路由是正常的,请往下看忘说了,我的主应用和子应用都是Vue主应用......
  • Python全栈工程师之从网页搭建入门到Flask全栈项目实战(2) - 入门前端框架Bootstrap
    Bootstrap框架介绍Bootstrap是最受欢迎的HTML、CSS和JS框架,用于开发响应式布局、移动设备优先的WEB项目Bootstrap的特点Bootstrap让前端开发更快速、简单所有开发者都......