美文网首页
flask笔记(七):简单路由设置

flask笔记(七):简单路由设置

作者: warmsirius | 来源:发表于2019-08-27 08:27 被阅读0次

一、视图支持的请求方法

flask默认的视图支持的请求方法只包括三种:

  • GET
  • HEAD
  • OPTIONS

其中HEADOPTIONS方法由Flask自动处理,如果不传参数,默认为GET请求.

Q: 如何编写支持 POST 请求方法的函数?

答:在视图函数定义时候,在路由装饰器中可指定参数methodsmethods类型为List,可以支持List中包含的多个请求方法。

@app.route("/post_only", methods=['POST'])
def post_only():
    return "post only page"

输出

Map([<Rule '/post_only' (OPTIONS, POST) -> post_only>, 
    ...])

二、几种匹配情况

情况A:两个路由的Path一样,请求方式也一样

这种情况下,路由匹配时,按照app.url_map中列表路由的Path来的,根据Path对应的视图函数位置优先。

如果不理解,参考Django的路由优先匹配规则,匹配到了就执行这个视图函数,并且返回。

  • 代码
@app.route('/hello')
def hello():
    return 'hello1'


@app.route('/hello')
def hello2():
    return 'hello2'
  • 浏览器请求页面

情况B:路由一样,但是请求方式不一样

根据请求方式分发路由,不会出现位置优先,此时请求方法优先。

  • 代码
@app.route('/hello', methods=["POST"])
def hello():
    return 'hello1'


@app.route('/hello', methods=['GET'])
def hello2():
    return 'hello2'
  • 浏览器请求页面

三、Path不同,视图函数功能相同,如何添加多个Path?

Django中有时候会多个路径使用同一个视图函数,在urlpatterns直接调用方法即可。

flask中,只需要在视图函数的上面添加app.route路由装饰器即可

  • 代码示例
@app.route('/hi1')
@app.route('/hi2')
def hi():
    return 'hi page'

这样就可以实现访问 /hi1/hi2 时,都是调用的 hi 方法。

四、跳转到某个路径

Django:

  • reverse:根据url别名解析路由
  • redirect:跳转到某个url

Flask

  • url_for:反解析,根据视图函数名字就可以解析路由
  • redirect:跳转到某个url

举例

from flask import Flask, redirect, url_for


@app.route('/login')
def login():
    # 使用url_for的函数,通过视图函数的名字找到视图对应的url路径
    url = url_for("index")
    return redirect(url)

注意:如果是路由不同,但是视图函数相同,方法也相同,优先返回离视图函数最近的路径

  • 代码
from flask import Flask, redirect, url_for


@app.route('/hi1')
@app.route('/hi2')
def hi():
    return 'hi page'

@app.route('/login')
def login():
    # 使用url_for的函数,通过视图函数的名字找到视图对应的url路径
    url = url_for("hi")
    print(url)
    return redirect(url)

输出

/hi2

相关文章

网友评论

      本文标题:flask笔记(七):简单路由设置

      本文链接:https://www.haomeiwen.com/subject/fqcsectx.html