前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask 视图函数的URL路由设置说明

Flask 视图函数的URL路由设置说明

作者头像
Devops海洋的渔夫
发布2019-11-13 21:39:23
1.7K0
发布2019-11-13 21:39:23
举报
文章被收录于专栏:Devops专栏Devops专栏

相对于Django的URL路由设置来说,Flask配置的方式有较多的不同。 下面来根据几个示例,来看看有什么地方不同。

示例如下:

  • app.url_map 查看所有路由
  • 使用methods设置视图GET、POST请求的方式
  • 同一路由装饰多个视图函数
  • 同一视图多个路由装饰器
  • 使用 url_for 进行url反向解析

app.url_map 查看所有路由

Flask的路由可以通过视图函数的修饰器@app.route()来配置访问url。 在Django中可以在urls.py中查看所有视图的url信息,那么Flask如何查看所有视图url的信息呢?

可以看到日志中打印出了url的信息。

使用methods设置视图GET、POST请求的方式

在Flask的视图配置了url之后,默认是只支持GET请求的。如果需要处理POST请求,则需要使用methods参数设置一下。

代码语言:javascript
复制
# 通过methods设置GET\POST请求
@app.route('/post_only', methods=["POST"])
def post_only():
    return "post only page"

在浏览器访问: http://127.0.0.1:5000/post_only

可以看到不允许GET请求。那么下面来给这个视图再设置允许GET请求。

代码语言:javascript
复制
# 通过methods设置GET\POST请求
@app.route('/post_only', methods=["GET","POST"])
def post_only():
    return "post only page"

再次访问 http://127.0.0.1:5000/post_only

可以看到GET请求能否正常访问了。

同一路由装饰多个视图函数

在同一个url路由的请求下,可以会有GET\POST\DELETE\PUT等多个不同的业务处理。 那么就需要使用不同的视图函数来区分处理。

代码语言:javascript
复制
@app.route('/hello', methods=["GET"])
def hello_get():
    return "hello_get"

@app.route('/hello', methods=["POST"])
def hello_post():
    return "hello_post"

从结果来看,同一个url下,根据配置不同的method,则可以设置到不同的视图函数进行业务处理。

同一视图多个路由装饰器

一个视图如何定义多个url进行访问? 在Django中只要在urls.py中设置多行url定义即可,而在Flask中只需要使用多个路由修饰器进行定义。

代码语言:javascript
复制
# 一个视图设置多个URL
@app.route('/diff_url1')
@app.route('/diff_url2')
def diff_url():
    return "diff url"

使用 url_for 进行反解析

类似于Django在设置转发url的时候不会直接去写死路径,而是使用url设置的name值来进行url反向解析。 在Flask中则可以使用url_for来进行反向解析,而Flask的视图函数不需要设置name,而是直接使用视图函数的函数名即可。

代码语言:javascript
复制
from flask import  redirect, url_for

@app.route('/hello', methods=["GET"])
def hello_get():
    return "hello_get"

# 使用url_for进行反向解析
@app.route('/url_for_test')
def url_for_test():
    return redirect(url_for('hello_get'))

测试访问 http://127.0.0.1:5000/url_for_test

可以看到页面自动跳转至 hello_get 的视图函数中。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • app.url_map 查看所有路由
  • 使用methods设置视图GET、POST请求的方式
  • 同一路由装饰多个视图函数
  • 同一视图多个路由装饰器
  • 使用 url_for 进行反解析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档