Flask 入门2:路由

1. 前言

在上一节中,我们使用到了静态路由 ,即一个路由规则对应一个 URL。而在实际应用中,更多使用的则是动态路由,它的 URL是可变的。

2. 定义一个很常见的路由地址

python 复制代码
@app.route('/user/<username>')
def user(username):
    return 'User %s' % username

username 作为参数,传入 user() 函数当中。

需要记住的是,在定义路由的参数名时一定要与定义函数的变量名一致,否则就会引发异常。

3. Flask 提供了三种转换器

  • int:整型;
  • float:浮点数;
  • path:路径。

虽不包含正则表达式,但是可以手动添加。

python 复制代码
from werkzeug.routing import BaseConverter

class RegexConverter(BaseConverter):
    def __init__(self, url_map, *items):
        super(RegexConverter, self).__init__(url_map)
        self.regex = items[0]
        
app.url_map.converters['regex'] = RegexConverter

@app.route('/user/<regex("[a-z]{3}"):user_id>')
def user(user_id):
    return 'User %s' % user_id

这里代码块就添加了一个正则表达式,要求三个字符。

4. 比较友好的路由定义方式

python 复制代码
@app.route('/projects/')
def projects():
    return 'The project page'

路径后面加一个斜杠。

5. 也可以多个定义,同时指向同一个页面

python 复制代码
@app.route('/works/')
@app.route('/projects/')
def projects():
    return 'The project page'

6. http方法

在路由定义里面也同样包括 http 的方法,即 GET、POST 等。

python 复制代码
@app.route('/login', methods=['GET', 'POST'])

常见的 http 方法:

GET:浏览器告知服务器,只获取页面上的信息并发送给我。这是最常用的方法。

POST:浏览器告诉服务器,想在 URL 上发布新消息。并且服务器必须确保数据已存储且仅存储一次。这是 HTML 表单通常发送数据到服务器的方法。

PUT:类似 POST,但服务器可能多次触发了存储过程,并且多次覆盖掉旧值。你可能会问这有什么用,当然这是有原因的。考虑到传输中连接可能会丢失,在这种情况下浏览器和服务器之间的系统可能安全地第二次接收请求,而不破坏其他东西。因为 POST 它只触发一次,所以用 POST 是不可能的。

DELETE:删除给定位置的信息。

HEAD:浏览器告诉服务器,欲获取数据,但是只关心消息头。应像 GET 请求一样来处理它,但是不分发实际内容。在 Flask 中你完全无需人工干预,底层的 Werkzeug 库已经帮你打点好了。

OPTIONS:给客户端提供一个敏捷的途径来弄清这个 URL 支持哪些 http 方法。从 Flask 0.6 开始,实现了自动处理。

相关推荐
学java的可达鸭几秒前
一个只会 MVC 的 java 小白对 DDD 的理解
后端
BoBoZz19几秒前
MultipleRenderWindows 创建多个渲染窗口
python·vtk·图形渲染·图形处理
掘金者阿豪2 分钟前
Kubernetes 中 "Deployment does not have minimum availability" 错误解析与解决方案
后端
Java编程爱好者4 分钟前
SpringBoot+SPI机制,轻松实现可插拔组件
后端
无限大67 分钟前
为什么"容器化"技术很重要?——从虚拟机到 Docker
后端·github
qq_124987075311 分钟前
基于springboot的智能任务管理助手小程序设计与实现(源码+论文+部署+安装)
spring boot·后端·信息可视化·微信小程序·小程序·毕业设计·计算机毕业设计
狂炫冰美式12 分钟前
Meta 收购 Manus:当巨头搭台时,你要做那个递钥匙的人
前端·人工智能·后端
狂奔小菜鸡16 分钟前
Day36 | Java中的线程池技术
java·后端·java ee