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)

路由正则

原文地址:https://www.cnblogs.com/XLHIT/p/11170539.html