共计 1539 个字符,预计需要花费 4 分钟才能阅读完成。
一、视图概述
-
作用
接收 web 请求并返回 web 响应
-
本质
python 的函数
-
使用
先定义视图再匹配路由
二、路由
-
概述
请求地址会被底层 Werkzeug 库处理 (去除 ip 和端口),用于进行路由匹配,匹配成功后将找打的视图函数进行调用,处理本次用户的请求
-
格式
- @工程对象.route(“url 地址”)
- @蓝图对象.route(“url 地址”)
-
url_map 属性
功能:查看当前所有的路由配置
使用:app.url_map
-
无参路由
@app.route('/index/') def index(): return 'Hello Flask'
-
传参路由
A、带一个参数的路由
# 带参路由,参数写在 <> 中 @app.route('/arg/<name>') def arg(name): return 'Hello %s !' % name
B、带多个参数的路由
@app.route('/args/<name>_<age>') @app.route('/args/<name>/<age>') def args(name, age): print(name, age) return name, age
C、参数类型限制
- string 默认 参数类型为字符串
- int 限制参数类型为整数
- float 限制参数类型为小数
- path 其实也是字符串,只是’/’ 不再是分隔符
@app.route('/welcome/<string:name>/<int:age>/<float:height>/<path:pstr>/') def welcome(name, age, height, pstr): print(type(name),type(age), type(height), type(pstr)) print(name, age, height, pstr) return '类型限制'
注意:
- 路由末尾的’/’ 建议都加上,因为路由需要的时候浏览器会自动加上,输入时加不加都行
- 若需要制定参数,将参数写在 <> 中,视图函数参数要与路由参数一致
- 若需要知道参数类型,如:int/float/path 等,写在参数前,用’:’ 与参数隔开
- 不指定类型,参数默认是 string,path 其实也是字符串,只是’/’ 不再是分隔符
D、正则约束
-
作用
使用正则表达式对路由进行更具体的约束
-
正则转换类(app.py)
from werkzeug.routing import BaseConverter class RegexConverter(BaseConverter): def __init__(self, url, *args): super().__init__(url) self.regex = args[0]
-
给 app 对象注册路由转换类
app.url_map.converters["regex"] = RegexConverter
-
使用
@app.route("/test_regex/<regex('\d{2}'):age>/") def test_regex(age): # 正则约束是约束的值的样子,不会约束类型 print(age) return age
-
HTTP 方法
概述:默认视图可以被 GET 访问,flask 中可以规定以什么样的方式请求视图,如果使用不正确的请求方式会返回 405 错误
GET
@app.route("/get/") def test_get(): return "GET"
POST
@myApp.route("/post/", methods=["POST"]) def test_post(): return "POST"
GET OR POST
@myApp.route("/get_post/", methods=["GET", "POST"]) def test_get_post(): return "test_get_post"
-
http 请求方式
- get
- post
- put
- patch
- delete
正文完
星哥玩云-微信公众号