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

2019-08-27  本文已影响0人  warmsirius

一、视图支持的请求方法

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

其中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:

Flask

举例

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
上一篇 下一篇

猜你喜欢

热点阅读