美文网首页
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