Python武器库开发-flask篇之路由和视图函数(二十二)

flask篇之路由和视图函数(二十二)

通过创建路由并关联函数,实现一个基本的网页:

python 复制代码
#!/usr/bin/env python3
from flask import Flask

# 用当前脚本名称实例化Flask对象,方便flask从该脚本文件中获取需要的内容
app = Flask(__name__)

#程序实例需要知道每个url请求所对应的运行代码是谁。
#所以程序中必须要创建一个url请求地址到python运行函数的一个映射。
#处理url和视图函数之间的关系的程序就是"路由",在Flask中,路由是通过@app.route装饰器(以@开头)来表示的
@app.route("/")
#url映射的函数,要传参则在上述route(路由)中添加参数申明
def index():
    return "Hello World!"

# 启动一个本地开发服务器,激活该网页
if __name__ == '__main__':
    app.run()

现在我们保存这个脚本然后去运行它

python 复制代码
python3 app.py

然后使用任意浏览器输入地址 http://127.0.0.1:5000,即可访问该界面

通过绑定路由实现多个视图函数:

python 复制代码
#!/usr/bin/env python3
from flask import Flask

# 用当前脚本名称实例化Flask对象,方便flask从该脚本文件中获取需要的内容
app = Flask(__name__)

#程序实例需要知道每个url请求所对应的运行代码是谁。
#所以程序中必须要创建一个url请求地址到python运行函数的一个映射。
#处理url和视图函数之间的关系的程序就是"路由",在Flask中,路由是通过@app.route装饰器(以@开头)来表示的
@app.route("/")
#url映射的函数,要传参则在上述route(路由)中添加参数申明
def index():
    return "Hello World!"
#处理url和视图函数之间的关系的程序就是"路由",在Flask中,路由是通过@app.route装饰器(以@开头)来表示的,通过在浏览器中使用/a便可以访问该视图函数
@app.route("/a")
def add():
	return "1+1=2"

# 启动一个本地开发服务器,激活该网页
if __name__ == '__main__':
    app.run()

现在我们保存这个脚本然后去运行它

然后使用任意浏览器输入地址 http://127.0.0.1:5000/a,便可以访问第二个视图函数的页面

动态路由传入变量实现视图函数:

python 复制代码
#!/usr/bin/env python3
from flask import Flask

# 用当前脚本名称实例化Flask对象,方便flask从该脚本文件中获取需要的内容
app = Flask(__name__)

#通过格式<>,来实现动态路由
@app.route("/usr/<username>"):
def user_index(username):
	#在函数中指明变量名称username,就能够获取通过路由传入的变量username
	return "Hello{}".format(username)

# 启动一个本地开发服务器,激活该网页
if __name__ == '__main__':
    app.run()

现在我们保存这个脚本然后去运行它

然后使用任意浏览器输入地址 http://127.0.0.1:5000/user/动态变量,便可以访问该视图函数

通过格式<int:变量>,来实现动态路由传入指定的参数:

python 复制代码
#!/usr/bin/env python3
from flask import Flask

# 用当前脚本名称实例化Flask对象,方便flask从该脚本文件中获取需要的内容
app = Flask(__name__)

#通过格式<int:变量>,来实现动态路由传入指定的参数
@app.route("/post/<int:post_id>"):
def show_post(post_id):
	#在函数中指明变量名称post_id,就能够获取通过路由传入的变量post_id
	return "Post {}".format(post_id)

# 启动一个本地开发服务器,激活该网页
if __name__ == '__main__':
    app.run()

现在我们保存这个脚本然后去运行它

然后使用任意浏览器输入地址 http://127.0.0.1:5000/post/1,传入指定的 int 型传参,便可以访问该视图函数

但如果此时我们传入的参数不是一个数字型的参数,而是一个字符型的参数,则界面会显示报错

通过debug模式,来实现时实修改代码:

之前的案列中我们都是通过修改代码之后在运行代码来实现某个功能的运行的,这样很麻烦,现在来教大家一个时实修改代码,而不用重启运行代码的方式,现在我们向app.run()函数中添加debug=True来启动debug模式

python 复制代码
#!/usr/bin/env python3
from flask import Flask

# 用当前脚本名称实例化Flask对象,方便flask从该脚本文件中获取需要的内容
app = Flask(__name__)

#程序实例需要知道每个url请求所对应的运行代码是谁。
#所以程序中必须要创建一个url请求地址到python运行函数的一个映射。
#处理url和视图函数之间的关系的程序就是"路由",在Flask中,路由是通过@app.route装饰器(以@开头)来表示的
@app.route("/")
#url映射的函数,要传参则在上述route(路由)中添加参数申明
def index():
    return "Hello World!"
#处理url和视图函数之间的关系的程序就是"路由",在Flask中,路由是通过@app.route装饰器(以@开头)来表示的,通过在浏览器中使用/a便可以访问该视图函数
@app.route("/a")
def add():
	return "1+1=2"

# 启动一个本地开发服务器,激活该网页
if __name__ == '__main__':
	#通过debug=True启动debug模式
    app.run(debug=True)

现在我们保存这个脚本以debug的模式去运行它

然后使用任意浏览器输入地址 http://127.0.0.1:5000/a,便可以访问第二个视图函数的页面

现在如果我们想要动态调试代码,那就再打开一个终端界面

python 复制代码
vim app.py

然后将代码修改为以下的代码,保存退出即可

python 复制代码
#!/usr/bin/env python3
from flask import Flask

# 用当前脚本名称实例化Flask对象,方便flask从该脚本文件中获取需要的内容
app = Flask(__name__)

#程序实例需要知道每个url请求所对应的运行代码是谁。
#所以程序中必须要创建一个url请求地址到python运行函数的一个映射。
#处理url和视图函数之间的关系的程序就是"路由",在Flask中,路由是通过@app.route装饰器(以@开头)来表示的
@app.route("/")
#url映射的函数,要传参则在上述route(路由)中添加参数申明
def index():
    return "Hello World!"
#处理url和视图函数之间的关系的程序就是"路由",在Flask中,路由是通过@app.route装饰器(以@开头)来表示的,通过在浏览器中使用/b便可以访问该视图函数
@app.route("/b")
def add():
	return "1+1=2"

# 启动一个本地开发服务器,激活该网页
if __name__ == '__main__':
	#通过debug=True启动debug模式
    app.run(debug=True)

这一步我们不需要再去重新启动脚本了,因为该脚本一直再以debug的模式运行,然后使用任意浏览器输入地址 http://127.0.0.1:5000/b,便可以访问我们刚刚修改过的视图函数的页面

相关推荐
呱呱复呱呱2 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽7 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码7 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱17 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵18 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663671 天前
使用 Python 从零创建 Word 文档
python
Csvn1 天前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户556918817531 天前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维