【flask入门系列】处理请求之url 路径参数的获取以及转换器的使用

简介: 这节我们写一下url路径参数的获取以及转换器的使用,学一下如何在我们的的url路径中加参数以及如何使用转换器,并且自定义转换器。

📋 个人简介

  • 💖 作者简介:大家好,我是阿牛。😜
  • 📝 博主的个人网站:阿牛的博客小屋🔥

@TOC

前言

这节我们写一下url路径参数的获取以及转换器的使用,学一下如何在我们的的url路径中加参数以及如何使用转换器,并且自定义转换器。

url路径参数(动态路由)

例如,有一个请求访问的接口地址为/users/12,其中12实际上为具体的请求参数,表明请求12号用户的信息。此时如何从 url 中提取出12的数据?
Flask不同于Django直接在定义路由时编写正则表达式,而是采用转换器语法:

#导入Flask类和蓝图
from flask import Flask,Blueprint

# 从配置对象中加载的默认配置
class DefaultConfig(object):
    SECERT_KEY = 'jstwn63bng'

# 创建Flask项目的工厂函数
def create_flask_app(config):
    app = Flask(__name__)
    app.config.from_object(config)
    return app

#1.创建一个蓝图对像
user_Bp = Blueprint('user',__name__)

#2.在这个蓝图对象上进行操作,注册路由,指定静态文件夹,注册模板过滤器
@user_Bp.route('/users/<user_id>')
def user(user_id):
    return "我是" + user_id + "号"
#3.在应用对象上注册这个蓝图对象
app.register_blueprint(user_Bp)

代码中的<>即是一个转换器,默认为字符串类型,即将该位置的数据以字符串格式进行匹配,并以字符串为数据类型,user_id为参数名传入视图。

采用flask新的运行方式,在当前项目的终端输入:flask run指令,项目成功运行
在这里插入图片描述

在这里插入图片描述

转换器的使用

上面代码中的<>是一个转换器,默认为字符串类型,但是我们的Flask也提供其他类型的转换器:

转换器字典:

DEFAULT_CONVERTERS = {
    'default':          UnicodeConverter,
    'string':           UnicodeConverter,
    'any':              AnyConverter,
    'path':             PathConverter,
    'int':              IntegerConverter,
    'float':            FloatConverter,
    'uuid':             UUIDConverter,
}

将上面的例子以整型匹配数据,可以如下使用:

@user_Bp.route('/users/<int:user_id>')

在这里插入图片描述

自定义转换器

如果遇到需要匹配提取/sms_codes/18543622578 中的手机号数据,Flask内置的转换器就不行了,此时就需要自定义转换器。

定义转换器
自定义转换器主要做3步
1.创建转换器类,保存匹配时的正则表达式

from werkzeug.routing import BaseConverter

class MobileConverter(BaseConverter):
    #手机号格式
    # 注意:regex名字固定
    regex = r'1[3-9]\d{9}'

注意:regex名字固定
2.将自定义的转换器告知Flask应用

app = Flask(__name__)

# 将自定义的转换器添加到转换器字典中,并指定转换器使用时的名字为:mobile
app.url_map.converters['mobile'] = MobileConverter

3.在使用转换器的地方定义使用

@app.route('/sms_codes/<mobile:phone_num>')
def sms_code(phone_num):
    return 'send sms_code to {}'.format(phone_num)

示例

#导入Flask类
from flask import Flask
from werkzeug.routing import BaseConverter

class MobileConverter(BaseConverter):
    #手机号格式
    # 注意:regex名字固定
    regex = r'1[3-9]\d{9}'

app = Flask(__name__)

# 将自定义的转换器添加到转换器字典中,并指定转换器使用时的名字为:mobile
app.url_map.converters['mobile'] = MobileConverter

@app.route('/sms_codes/<mobile:phone_num>')
def sms_code(phone_num):
    return 'send sms_code to {}'.format(phone_num)

在这里插入图片描述

结语

如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。

相关文章
|
19天前
|
JavaScript
vue截取URL中的参数
vue截取URL中的参数
13 0
|
2月前
|
前端开发
[牛客网-前端大挑战QD2] 获取url参数
[牛客网-前端大挑战QD2] 获取url参数
19 0
|
2月前
BurpSuite8.2 -- 查找包含id参数的URL
BurpSuite8.2 -- 查找包含id参数的URL
19 1
|
2月前
|
分布式计算 DataWorks 关系型数据库
DataWorks数据源问题之参数“连接Url”如何解决
DataWorks数据源是指DataWorks中配置的用于数据集成的外部数据源;本合集将讲解如何在DataWorks中配置和管理数据源,以及处理数据源连接和集成过程中的问题。
29 5
|
2月前
feign发起url请求日期序列化问题
feign发起url请求日期序列化问题
41 0
|
2月前
feign使用url参数传参@SpringQueryMap使用
feign使用url参数传参@SpringQueryMap使用
35 0
|
9天前
|
JSON 数据格式 Python
如何在Flask框架中定义路由和处理请求?
【4月更文挑战第18天】在Flask框架中,创建应用实例、定义路由和处理请求涉及5个步骤:1) 导入Flask并实例化应用;2) 使用`app.route()`装饰器定义路由,指定URL和HTTP方法;3) 编写视图函数处理请求逻辑;4) 视图函数返回响应内容,Flask会自动转换格式;5) 用`app.run()`启动服务器。
21 3
|
18天前
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
|
18天前
|
JavaScript
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
|
1月前
|
前端开发 JavaScript