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 开始,实现了自动处理。

相关推荐
2301_78204045几秒前
golang如何实现图片水印批量添加_golang图片水印批量添加实现策略
jvm·数据库·python
夏恪1 分钟前
Redis如何利用Redisson处理并发击穿
jvm·数据库·python
兔子零10243 分钟前
当 Codex 成为主力,软件工程的重心已经变了
前端·后端·架构
俊昭喜喜里3 分钟前
Allegro/OrCad转换成立创eda文件
python·django
2401_850491658 分钟前
如何处理SQL注入敏感源_记录所有不安全的SQL请求
jvm·数据库·python
彳亍1018 分钟前
如何防御SQL注入的SQL畸形查询_利用语法分析器检测
jvm·数据库·python
用户6757049885029 分钟前
别再死记硬背了!一文扒光 I/O 多路复用的底裤(Epoll/Select/Poll)
后端
m0_7414817810 分钟前
如何使用 AWS Lambda 和 Python 获取 EMR 集群的标签列表
jvm·数据库·python
m0_6908258211 分钟前
宝塔面板如何检查服务器安全风险_运行宝塔安全扫描功能
jvm·数据库·python
牛奶13 分钟前
网关是怎么当"门卫"的?
前端·后端·负载均衡