flask的路由和变量规则
@app.route('/')
app是创建的应用对象,‘/’就是路由,表示如果输入了这个地址,那么flask就会调用对应的demo1()函数来进行处理
我们可以给应用定义多个路由,这样不同的url就会有不同的处理函数:
from flask import Flask app1 = Flask('first_flask_demo') @app1.route('/') def demo1(): return 'Welcome to python in one' @app1.route('/api_demo2') # 定义另外一个路由 def api_demo2(): return 'you are visiting api_demo2' if __name__ == '__main__': app1.run()
运行后在浏览器中即可输入地址 http://localhost:5000/api_demo2 来查看这个新的地址。
通过路由规则add_url_rule将view与route绑定实现
from flask import Flask import setting app = Flask(__name__)
app.config.from_object(setting)
@app.route('/')
def hello():
return 'hello world'
def index():
return 'test'
app.add_url_rule('/index',view_func=index)if __name__ == '__main__': app.run(host='127.0.0.1', port=8000)
运行后查看结果
动态路由
前面介绍的是静态路由,但有些 URL 的格式是 /user/alex,其中 alex 表示用户名,不同的用户会有不同的名字。例如用户名是 bob,那么其对应的 URL 就是 /user/bob。这种情况下可以使用变量来代替名字部分,方法如下:
app.route('/user/<username>')
在处理函数内部可以使用变量 username 来获得输入参数的实际值。下面是一个简单的例子:
from flask import Flask app1 = Flask('first_flask_demo') @app1.route('/user/<username>') # 指定了格式 def demo1(username): # username是用户从地址上的输入 return 'Welcome %s' % username if __name__ == '__main__': app1.run(debug=True, host='0.0.0.0', port=8080)
运行后在浏览器中输入地址 http://localhost:8080/user/alex,可以看到输出为 Welcome alex
如果在浏览器中输入地址 http://localhost:8080/user/alice,则可以看到输出为 Welcome alice
限定类型
如果希望限定输入的动态字段的类型,可以使用 <类型:变量名> 来实现,例如如果希望某个字段只能是整数,那么可以写为 /user/<int:user_id>。
下面是一个简单的例子:
from flask import Flask # 引入Flask app1 = Flask('first_flask_demo') # 创建应用程序 @app1.route('/user/<int:userid>') # 限定参数userid只能是整数 def demo1(userid): return 'Welcome you [User %d]' % userid if __name__ == '__main__': app1.run(debug=True, host='0.0.0.0', port=8080)
运行后在浏览器中输入地址 http://localhost:8080/user/12,可以看到 Welcome you[User12] 这样的输出
如果输入的不是整数,例如,输入的地址是 http://localhost:8080/user/alex,则可看到 404 错误
地址尾部的“/”
如果路由的尾部带有“/”,那么在浏览器的地址栏中输入“/”和不输入“/”的效果是一样的。如果路由的尾部没有“/”,那么在浏览器的地址栏中是不能输入“/”的,否则会出错。
例如下面的代码:
from flask import Flask # 引入flask模块 app1 = Flask('first_flask_demo') # 应用程序 @app1.route('/projects/') # 注意:尾部带有“/” 如果路由当中有“/” 在请求的时候不管是否有“/” 都会访问成功 def projects(): return 'The PROJECTS page' @app1.route('/about') # 注意:尾部没有“/” 如果路由当中添加“/” 访问地址为:http://127.0.0.1:5000/about/ 会报错 not fond def about(): return 'The ABOUT page' if __name__ == '__main__': # 如果是运行该脚本 app1.run(debug=True, host='0.0.0.0', port=8080)
在输入 http://localhost:8080/projects/ 地址时,一切正常。
如果在浏览器的地址栏中输入 http://localhost:8080/projects,则会自动重定向到 http://localhost:8080/projects/,也没有问题。
如果输入 http://localhost:8080/about,一切正常。
如果输入 http://localhost:8080/about/,则会得到 404 错误
目前 Flask 支持的类型如表 6 所示。
类 型 | 含 义 |
---|---|
string | 接受任何不包含斜杠的文本,这是默认值 |
int | 接受正整数 |
float | 接受正浮点数 |
path | 类似 string,但可以包含斜杠 |
uuid | 接受 UUID 字符串 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2020-08-05 Mongodb分片部署