Flask中app.route装饰器参数的使用

 更新时间:2023年11月07日 11:53:59   作者:孤寒者  
app.route()是Flask框架中用于定义路由的装饰器函数,本文主要介绍了Flask中app.route装饰器参数的使用,具有一定的参考价值,感兴趣的可以了解一下

app.route参数

app.route()是Flask框架中用于定义路由的装饰器函数,它接受一些参数来指定路由的URL规则、请求方法等。

app.route()参数如下:

  • rule(必选):定义URL规则的字符串,表示要匹配的URL路径。可以包含动态部分,使用尖括号(< >)来指定动态部分的名称和类型。例如:/user/<username>

  • view_func(必选):用于指定将要执行的视图函数,即处理请求的函数。它接受一个函数作为值。这个函数通常是一个Flask应用程序中定义的视图函数,用于处理路由匹配后的请求。

    例如:

    @app.route('/index')
    def index():
        return 'Hello, World!'
    

    在这个例子中,view_func就是index函数,它会在匹配到/index路径时被调用。通过将视图函数传递给view_func参数,我们可以将路由和视图函数关联起来,以便在匹配到相应的URL规则时执行相应的视图函数。

  • methods(可选):定义允许的HTTP请求方法。可以是一个字符串或一个包含多个字符串的列表。默认情况下,允许GET请求。例如:methods=['GET', 'POST']

  • endpoint(可选):为路由定义一个唯一的端点名称,用于反向生成URL,即: url_for(‘名称’)。如果未指定,默认使用视图函数的名称。例如:endpoint='index'

  • defaults(可选):为动态部分提供默认值,以便在没有提供相应值时使用。默认值是一个字典。例如:defaults={'page': 1}

    在Flask中,我们可以使用尖括号(< >)来定义动态路由部分,例如<username>。这样的路由规则可以匹配不同的URL路径,其中动态部分的值会作为参数传递给视图函数进行处理。

    然而,有时候在处理请求时可能没有提供相应的动态部分值,或者我们希望在没有提供值时使用一些默认值。这时,就可以使用defaults参数来指定默认值。

    defaults参数接受一个字典作为值,字典的键是动态路由部分的名称,值是对应的默认值。当没有提供对应动态部分的值时,Flask将使用默认值来替代。

    举例:

    @app.route('/user/<username>', defaults={'username': 'GuHanZhe', 'page': 1})
    def user_profile(username, page):
        return f"Username: {username}, Page: {page}"
    

    在上面的示例中,我们定义了一个路由规则/user/<username>,并为其中的动态路由部分username提供了默认值:GuHanZhe。同时,我们还添加了一个名为page的动态路由部分,并通过defaults参数为其提供了默认值为1。

    当访问/user/johndoe时,username参数将被设置为johndoe,而page参数将使用默认值1。因此,视图函数user_profile将返回"Username: johndoe, Page: 1"

    如果提供了page参数,例如访问/user/johndoe?page=2,则page参数将被设置为2,并覆盖默认值。所以,视图函数将返回"Username: johndoe, Page: 2"

    通过使用defaults参数,我们可以方便地为动态路由部分提供默认值,以应对没有提供相应值的情况。

  • host(可选):限制路由只匹配特定的主机名。例如:host='example.com'

  • strict_slashes(可选):控制是否严格匹配URL末尾的斜杠。默认情况下,路由规则对URL末尾的斜杠是不敏感的,即此参数值为False。这意味着/user/user/被视为相同的URL路径,并且可以匹配到同一个路由规则,但可以通过设置为True来禁用这个行为。例如:strict_slashes=True,这样Flask将不会自动处理URL末尾的斜杠。这意味着/user/user/被视为不同的URL路径,需要分别定义对应的路由规则才能匹配到。

  • subdomain(可选):限制路由只匹配特定的子域名。可以是一个字符串或一个包含多个字符串的列表。例如:subdomain='api'

  • redirect_to(可选):如果设置为另一个URL,会将请求重定向到该URL。例如:redirect_to='/new-url'

这些参数可以根据需要进行组合使用,以定义具体的路由规则。通过使用这些参数,可以创建出符合需求的路由规则,并将它们与相应的视图函数关联起来。

redirect_to=None,	重定向到指定地址
	如:
		@app.route('/index/<int:nid>', redirect_to='/home/<nid>')
		或def func(adapter, nid):
		      return "/home/888"
		@app.route('/index/<int:nid>', redirect_to=func)

subdomain=None,	子域名访问

defaults参数举例:

from flask import Flask

app = Flask(__name__)


@app.route('/index', defaults={'nid': 'xxx'})
def index(nid):
    print(nid)
    return 'Index'


if __name__ == '__main__':
    app.run('localhost', 4000)

redirect_to举例:

from flask import Flask

app = Flask(__name__)


@app.route('/index', redirect_to='/new')
def index(nid):
    print(nid)
    return '老功能'


@app.route('/new')
def new():
    return '新功能'


if __name__ == '__main__':
    app.run('localhost', 4000)

subdomain举例:

在 Flask 中,路由的 subdomain 参数可以用于匹配 URL 中的子域名,其中子域名是 URL 中域名部分的前缀。例如,blog.example.com 中的子域名是 blog,而父域名是 example.com

下面是使用子域名参数的 Flask 路由示例:

from flask import Flask

app = Flask(__name__)

@app.route('/', subdomain='www')
def index():
    return 'Welcome to the main site!'

@app.route('/', subdomain='blog')
def blog():
    return 'Welcome to the blog!'

if __name__ == '__main__':
    app.run()

在上面的代码中,我们定义了两个路由函数 index() 和 blog(),它们分别为主域名和子域名设置了路由。其中,subdomain 参数指定了路由函数应该匹配的子域名。

如果我们访问主域名 http://www.example.com/,Flask 会将请求路由到 index() 视图函数,而子域名 http://blog.example.com/ 的请求则会被路由到 blog() 视图函数。

需要注意的是,为了使用子域名参数,我们需要在部署 Flask 应用程序时配置 DNS 服务器或负载均衡器,使其将子域名指向正确的服务器。在本地开发环境中,我们可以在系统的 hosts 文件(windows系统这个文件路径:C:\Windows\System32\drivers\etc)中添加一条域名映射,实现子域名的模拟。

总之,使用 Flask 的 subdomain 参数可以为应用程序添加更加灵活和精细的路由规则,提升应用程序的可用性和用户体验。

到此这篇关于Flask中app.route装饰器参数的使用的文章就介绍到这了,更多相关Flask app.route参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python常用时间库time、datetime与时间格式之间的转换教程

    python常用时间库time、datetime与时间格式之间的转换教程

    Python项目中很多时候会需要将时间在Datetime格式和TimeStamp格式之间转化,下面这篇文章主要给大家介绍了关于python常用时间库time、datetime与时间格式之间转换的相关资料,需要的朋友可以参考下
    2023-02-02
  • Python装饰器用法实例总结

    Python装饰器用法实例总结

    这篇文章主要介绍了Python装饰器用法,结合实例形式总结分析了Python装饰器的功能、原理及常见使用方法,需要的朋友可以参考下
    2018-05-05
  • Python类型转换的魔术方法详解

    Python类型转换的魔术方法详解

    这篇文章主要介绍了Python类型转换的魔术方法详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 如何在Python中利用matplotlib.pyplot画出函数图详解

    如何在Python中利用matplotlib.pyplot画出函数图详解

    通过图像可以直观地学习函数变化、分布等规律,在学习函数、概率分布等方面效果显著,下面这篇文章主要给大家介绍了关于如何在Python中利用matplotlib.pyplot画出函数图的相关资料,需要的朋友可以参考下
    2022-08-08
  • python如何保证输入键入数字的方法

    python如何保证输入键入数字的方法

    今天小编就为大家分享一篇python如何保证输入键入数字的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • django2.2安装错误最全的解决方案(小结)

    django2.2安装错误最全的解决方案(小结)

    这篇文章主要介绍了django2.2安装错误最全的解决方案(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Python基于HOG+SVM/RF/DT等模型实现目标人行检测功能

    Python基于HOG+SVM/RF/DT等模型实现目标人行检测功能

    这篇文章主要介绍了Python基于HOG+SVM/RF/DT等模型实现目标检测[行人检测],今天这里并不是说要做出怎样的效果,而是基于HOG+SVM来实践机器学习检测的流程,需要的朋友可以参考下
    2022-06-06
  • Python使用爬虫爬取静态网页图片的方法详解

    Python使用爬虫爬取静态网页图片的方法详解

    这篇文章主要介绍了Python使用爬虫爬取静态网页图片的方法,较为详细的说明了爬虫的原理,并结合实例形式分析了Python使用爬虫来爬取静态网页图片的相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • Python实现批量转换文件编码的方法

    Python实现批量转换文件编码的方法

    这篇文章主要介绍了Python实现批量转换文件编码的方法,涉及Python针对文件的遍历及编码转换实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Python的条件控制 if 语句详解

    Python的条件控制 if 语句详解

    Python的 if 语句用来「控制代码」的执行,「判断条件成立」时执行一段代码,判断条件「不成立」时执行另一段代码,本文就给大家详细讲讲Python的条件控制 if 语句,需要的朋友可以参考下
    2023-08-08

最新评论