Flask路由
2021/5/21 18:29:42
本文主要是介绍Flask路由,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
路由就是一种映射关系。是绑定应用程序和url地址的一种一对一的映射关系!我们在开发过程中,编写项目时所使用的路由往往是指代了框架/项目中用于完成路由功能的类,这个类一般就是路由类,简称路由。
路由的基本使用
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World' # 指定访问路径为 demo @app.route('/demo') def demo1(): return 'demo' if __name__ == '__main__': app.run()
注意:路由和视图的名称必须全局唯一,不能出现重复,否则报错。
Flask中的参数
- 都是关键字参数
- 默认标识是<>
- username需要和对应的视图函数的参数名字保持一致。
- 参数允许有默认值:
- 如果有默认值,那么在路由中,不传输参数也是可以的。
- 如果没有默认值,参数在路由中必须传递。
- 参数默认类型是string,如果想修改为其它类型,如下
<参数类型:username>
# 设置username为int类型 <int:username>
注意:路由参数就是url路径的一部分
任意路由参数接收
@app.route('/user/<uid>') def user(uid): return f'uid={uid}'
运行结果:
限定路由参数接收
flask系统自带转换器编写在werkzeug.routing.py文件中的DEFAULT_CONVERTERS字典中。系统自带的转换器具体使用方式在每种转换器的注释代码中有写。
DEFAULT_CONVERTERS = { "default": UnicodeConverter, "string": UnicodeConverter, # 默认类型,接受不带斜杠的任何文本 default、string是一样的 "any": AnyConverter, # 可以指定多种路径 "path": PathConverter, # 接收string但也接受斜线 "int": IntegerConverter, # 接受正整数 "float": FloatConverter, # 接受正浮点值 "uuid": UUIDConverter, # 接受UUID(通用唯一识别码)字符串 xxxx-xxxx-xxxxx-xxxxx }
int、float
给参数指定类型,就在参数前加上参数类型和冒号即可。如下,指定id是int类型,可以直接进行运算。
@app.route('/user1/<int:id>') def user1(id): id = str(id ** 2) return id
运行结果:
path
指定path类型,可以获取当前路径,值得注意的是获取的不是完整路径,只是此处传入的路径参数,如下获取的路径是 testpath/test
@app.route('/<path:url_path>/') def user2(url_path): return f'url_path = {url_path}'
运行结果:
uuid
@app.route('/user3/<uuid:uu>') def user3(uu): return f'uu = {uu}'
运行结果:
any
@app.route('/user4/<any(article,blog):url_path>') def user4(url_path): return f'url_path = {url_path}' # 以上例子中,user4这个函数可以接受两个URL,一个是http://127.0.0.1:5000/user4/article/,另一个是http://127.0.0.1:5000/user4//blog/。并且,一定要传url_path参数,当然这个url_path的名称可以随便。
运行结果:
自定义路由转换器
也叫正则匹配路由参数.
在 web 开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要用到正则匹配,根据自己的规则去限定请求参数再进行访问
具体实现步骤为:
- 导入转换器基类:在 Flask 中,所有的路由的匹配规则都是使用转换器对象进行记录
- 自定义转换器:自定义类继承于转换器基类BaseConverter
- 添加转换器到默认的转换器字典中
- 使用自定义转换器实现自定义匹配规则
# 导入转换器基类 from werkzeug.routing import BaseConverter # 自定义正则转换器 class RegexConverter(BaseConverter): def __init__(self, map, *args): super().__init__(map) # 正则参数 self.regex = args[0] # 将自定义转换器添加到转换器字典中,并指定转换器使用时名字为: re app.url_map.converters['re'] = RegexConverter # 正则匹配路由 @app.route("/sms/<re('1[3-9]\d{9}'):mobile>") def sms(mobile): return f"mobile={mobile}"
运行结果:
路由限定请求方式
flask中请求默认是get请求,若想要指定其他请求方式,用参数methods指定。
如用户注册时,需要把用户填写的数据存入数据库,生成一条新用户的记录,此处就需要用到post请求。
@app.route('/register/', methods=['POST']) def register(): register_dict = request.form username = register_dict['usrename'] password = register_dict.get('password') user = User() user.username = username user.password = password db.session.add(user) db.session.commit() return '创建用户成功'
这篇关于Flask路由的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南