• Flask【第七章】:Flask中 的路由系统


    Flask中 的路由系统

    Flask中的路由系统其实我们并不陌生,从一开始到现在都一直在应用

    @app.route("/",methods=["GET","POST"])

    为什么要这么用?其中的工作原理我们知道多少?接下来我们就一起来看看

    一、@app.route()装饰器中的参数

    1. methods:当前url地址允许访问的请求方式

    该参数表名允许哪些请求来访问,methods后面可以跟列表、元组,只要是可迭代对象即可。

    @app.route("/info", methods=["GET", "POST"])
    def student_info():
        stu_id = int(request.args["id"])
        return f"Hello Old boy {stu_id}"  # Python3.6的新特性 f"{变量名}"

    2. endpoint:反向url地址,默认为视图函数名(url_for)

    from flask import Flask
    from flask import url_for,request
    
    app = Flask(__name__)
    
    @app.route("/info",methods=["GET","POST"],endpoint="r_info")
    def user_info():
        print(url_for("r_info"))  # /info
        user_id = int(request.args["id"])
        return f"Hello World {user_id}"  # Python3.6的新特性 f"{变量名}"
    
    app.run("0.0.0.0",5000,debug=True)

    地址栏输入url:http://127.0.0.1:5000/info?id=5,查看浏览器结果:

    3. defaults:视图函数的参数默认值{"nid":1}

    from flask import url_for
    
    @app.route("/info", methods=["GET", "POST"], endpoint="r_info", defaults={"nid": 100})
    def student_info(nid):
        print(url_for("r_info"))  # /info
        # stu_id = int(request.args["id"])
        print(nid)  # 100
        return f"Hello Old boy {nid}"  # Python3.6的新特性 f"{变量名}"

    4. strict_slashes:url地址结尾符"/"的控制。Flask:无论结尾"/"是否存在均可以访问;True:结尾必须不能是"/"

    # 访问地址 : /info 
    @app.route("/info", strict_slashes=True)
    def student_info():
        return "Hello Old boy info"
    
    
    # 访问地址 : /infos  or  /infos/
    @app.route("/infos", strict_slashes=False)
    def student_infos():
        return "Hello Old boy infos"

    5. redirect_to:url地址重定向(301永久重定向)

    # 访问地址 : /info 浏览器跳转至 /infos
    @app.route("/info", strict_slashes=True, redirect_to="/infos")
    def student_info():
        return "Hello Old boy info"
    
    @app.route("/infos", strict_slashes=False)
    def student_infos():
        return "Hello Old boy infos"

    6. subdomain

    说明:子域名前缀 subdomian="DragonFire" 这样写可以得到 DragonFire.oldboyedu.com 前提是app.config["SERVER_NAME"] = "oldboyedu.com"

    app.config["SERVER_NAME"] = "oldboy.com"
    
    @app.route("/info",subdomain="DragonFire")
    def student_info():
        return "Hello Old boy info"
    
    # 访问地址为:  DragonFire.oldboy.com/info

    二、动态参数路由

    from flask import url_for
    
    # 访问地址 : http://127.0.0.1:5000/info/1
    @app.route("/info/<int:nid>", methods=["GET", "POST"], endpoint="r_info")
    def student_info(nid):
        print(url_for("r_info",nid=2))  # /info/2
        return f"Hello Old boy {nid}"  # Python3.6的新特性 f"{变量名}"

    <int:nid>就是在url后定义一个参数接收,定义了这个nid参数数据类型为int类型;默认是str类型。

    需要注意的是,这种动态参数路由在url_for的时候,一定要将动态参数名+参数值添加进去,否则会抛出参数错误的异常。

    三、路由正则

    后面会说

  • 相关阅读:
    C#的list和arry相互转化
    c++11の的左值、右值以及move,foward
    c++11の异步方法 及线程间通信
    C#的static
    HDU4027 Can you answer these queries?
    POJ3264 Balances Lineup
    ZOJ1610 Count the Colors
    ZOJ4110 Strings in the Pocket(2019浙江省赛)
    HDU1698 Just a Hook
    POJ3468 A Simple Problem with Integers
  • 原文地址:https://www.cnblogs.com/zhangjunkang/p/10239591.html
Copyright © 2020-2023  润新知