• flask 路由系统 参数


    1 flask 路由系统

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

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

    当前视图函数支持的请求方法     405    请求方式不被允许

    @app.route("/info", methods=["GET", "POST"])
    def info():
        return 'go !!!'

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

    # @app.route("/info", methods=["GET", "POST"])
    # def info():
    #     print(url_for("info"))
    #     return 'go !!!'
    
    @app.route("/info", methods=["GET", "POST"],endpoint='r_info')
    def info():
        print(url_for("r_info"))  #/info
        return 'go !!!'

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

    一旦默认参数存在 视图函数中必须有一个形参去接收 形参变量名必须与 defaults 中的一致

    @app.route("/info", methods=["GET", "POST"], endpoint='r_info', defaults={'nid': 99})
    def info(nid):
        print(url_for("r_info"))  # /info
        print(nid)
        return 'go !!!'

    strict_slashes : url地址结尾符"/"的控制

    False : 无论结尾 "/" 是否存在均可以访问 ,

    True : 结尾必须不能是 "/"

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

    redirect_to : url地址重定向

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

    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

    动态参数路由

    <int:nid> 就是在url后定义一个参数接收

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

    @app.route("/info/<nid>", methods=["GET", "POST"]) #默认为字符串类型
    # @app.route("/info/<int:nid>", methods=["GET", "POST"])
    # @app.route("/info/<string:nid>", methods=["GET", "POST"])
    def info(nid): #注意接收参数
        # print(url_for("r_info"))  # /info
        print(nid,type(nid))
        return 'go !!!'


    @app.route("/info/<nid>", methods=["GET", "POST"],endpoint='r_info')
    def info(nid):
    print(url_for("r_info",nid=nid)) # /info/12
    print(nid,type(nid))
    return 'go !!!'
     

       /detail/<folder>/<filename>     文件

    @app.route("/info/<folder>/<filename>", methods=["GET", "POST"])
    # @app.route("/info/<filename>", methods=["GET", "POST"])
    def info(folder, filename):
        fp = os.path.join(folder, filename)
        return send_file(fp)

    路由正则

  • 相关阅读:
    Codeforces Round #360 B
    Codeforces Round #360 C
    Codeforces Round #360 D
    新姿势 树剖求LCA
    Codeforces 165D Beard Graph 边权树剖+树状数组
    hdu3966 树链剖分+线段树 裸题
    Codeforces Round #425 D
    Codeforces Round #425 B
    Codeforces Round #425 A
    bzoj 1036 树链剖分+线段树 裸题
  • 原文地址:https://www.cnblogs.com/XLHIT/p/11170539.html
Copyright © 2020-2023  润新知