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)
路由正则