Flask 的路由Route详情

 更新时间:2021年11月25日 11:54:57   作者:huxiaoxiao  
在上一篇Flask 入门Web 微框架Hello Flask中,我们用 Flask 框架写了一个 Hello Flask 应用程序,我们了解到 Flask 框架简洁高效、可以快速上手,接下来将对 Flask 框架的各项功能详细的介绍一下,本篇文章介绍的是 Flask 的路由(Route),需要的朋友可以参考一下

前言:

在上一篇Flask 入门Web 微框架Hello Flask中,我们用 Flask 框架写了一个 Hello Flask 应用程序,我们了解到 Flask 框架简洁高效、可以快速上手,接下来将对 Flask 框架的各项功能详细的介绍一下,本篇文章介绍的是 Flask 的路由(Route)。

1、路由

所谓路由,就是处理请求url和函数之间关系的程序,一个Web应用不同的路径会有不同的处理函数,当我们请求应用时,路由会根据请求的 url 找到对应处理函数。

2、视图函数绑定多个url

一个视图函数可以绑定多个 url,比如下面的代码把/hi/hello都绑定到hello()函数上,这就会为hello()函数注册两个路由,用户访问这两个 url 均会触发该函数。

在上一篇 Hello Flask 的基础上,添加下面的函数,并运行程序。

@app.route('/hi')

@app.route('/hello')

def hello():

    return 'Hello Flask!'

3、动态url

Flask 支持在 url 中添加变量部分,使用<变量名>的形式表示,Flask 处理请求时会把变量传入视图函数,所以可以在试图函数内获取该变量的值。

@app.route('/user/<name>')

def hello_user(name):

    return 'Hello {}!'.format(name)

当我们在浏览器中访问http://127.0.0.1:5000/hello/tigeriaf地址时,将在页面上看到"Hello tigeriaf!"。url 路径中/hello/后面的参数被hello()函数的name参数接收并使用。

我们还可以在 url 参数前添加转换器来转换参数类型,比如:

@app.route('/user/<int:user_id>')

def hello_user(user_id):

    return 'Hello user:{}!'.format(user_id)

访问http://127.0.0.1:5000/hello/111,页面上会显示"Hello user:111!"。其中,参数类型转换器int:控制传入参数的类型只能是整形,传入其他类型将报 404 的错误,

目前支持的参数类型转换器有:

  • string:字符型,但是其中不能包含斜杠"/"
  • int:整型
  • float:浮点型
  • uuid:uuid字符类型
  • path:字符型,可以包含斜杠"/",如aa/bb/cc

除此之外,还可以设置 url 变量参数的默认值,如下,在app.route()装饰器里使用defaults参数设置,接收一个字典,来存储 url 变量参数默认值映射。

@app.route('/user', defaults={'name': 'default_name'})

@app.route('/user/<name>')

def hello_user(name):

    return 'Hello {}!'.format(name)

上述代码中,/user不带参数,访问/user时,变量name就会使用默认值"default_name"。其实,这种做法等同于在hello_user()函数内给name变量设置缺省值。

4、HTTP请求方法设置

HTTP 请求方法常用的有GETPOSTPUTDELETEFlask 路由也可以设置请求方法,在app.route()装饰器中使用使用methods参数传入一个包含监听的 HTTP 请求的可迭代对象。 比如,下面的视图

函数同时监听GET请求和POST请求:

from flask import request

@app.route('/login', methods=['GET', 'POST'])

def login():

    if request.method == 'POST':

        return 'This is a POST request'

    else:

        return 'This is a GET request'

分别使用GET请求和POST请求访问http://127.0.0.1:5000/login时,会返回不同的内容,如果使用其他的请求方法(如PUT),会报 405 Method Not Allowed 的错误。

5、url构建

Flask提供了url_for()方法来快速获取及构建 url,方法的第一个参数是视图函数的名称,之后的一个或多个参数对应的是 url 变量部分。

比如:

@app.route('/superuser')

def hello_superuser():

    return 'Hello superuser!'

@app.route('/user/<name>')

def hello_user(name):

    return 'Hello {}!'.format(name)

@app.route('/user/<name>')

def hello(name):

    if name == 'superuser':

        return redirect(url_for('hello_superuser'))

    else:

        return redirect(url_for('hello_user', name=name))

上述代码中:url_for()方法是根据试图函数名称获取urlredirect()是根据 url 重定向到视图函数,二者配合使用,用作 url 的重定向。hello(name)函数接受来自 url 的参数的值,判断值是否与superuser匹配,如果匹配,则使用redirect(url_for())将应用程序重定向到hello_superuser()函数,否则重定向到hello_user()函数。

到此这篇关于Flask 的路由Route详情的文章就介绍到这了,更多相关Flask 的路由Route内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pytorch中TensorDataset与DataLoader的使用方式

    Pytorch中TensorDataset与DataLoader的使用方式

    这篇文章主要介绍了Pytorch中TensorDataset与DataLoader的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • django实现类似触发器的功能

    django实现类似触发器的功能

    今天小编就为大家分享一篇django实现类似触发器的功能,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 制作Python数字华容道的实现(可选择关卡)

    制作Python数字华容道的实现(可选择关卡)

    这篇文章主要介绍了制作Python数字华容道的实现(可选择关卡),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python用来做Web开发的优势有哪些

    Python用来做Web开发的优势有哪些

    这篇文章主要介绍了Python用来做Web开发的优势有哪些,文中讲解非常细致,帮助大家更好的理解和学习Python,感兴趣的朋友可以了解下
    2020-08-08
  • 浅谈pandas关于查看库或依赖库版本的API原理

    浅谈pandas关于查看库或依赖库版本的API原理

    本文主要介绍了浅谈pandas关于查看库或依赖库版本的API原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 解读什么是npy文件,为什么要用npy格式保存文件

    解读什么是npy文件,为什么要用npy格式保存文件

    这篇文章主要介绍了什么是npy文件,为什么要用npy格式保存文件这个问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 模拟浏览器的Python爬虫工具全面深入探索

    模拟浏览器的Python爬虫工具全面深入探索

    Python爬虫是获取网页信息的重要工具,但有时网站对爬虫有限制,要求模拟浏览器行为,本文将深入探讨如何使用Python模拟浏览器行为进行网络数据抓取,我们将介绍相关工具和技术,提供详细的示例代码和解释
    2024-01-01
  • Python内建类型dict深入理解源码学习

    Python内建类型dict深入理解源码学习

    这篇文章主要为大家介绍了Python内建类型dict的深入理解及源码学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Python实现多线程下载脚本的示例代码

    Python实现多线程下载脚本的示例代码

    这篇文章主要介绍了Python实现多线程下载脚本的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • OpenCV实战之图像拼接的示例代码

    OpenCV实战之图像拼接的示例代码

    图像拼接可以应用到手机中的全景拍摄,也就是将多张图片根据关联信息拼成一张图片。本文将介绍利用Python OpenCV实现图像拼接的方法,感兴趣的可以试一试
    2022-01-01

最新评论