Flask生成含随机数URL无法访问问题求助
问题描述
尝试在Flask中创建包含随机数的URL,使用random.randint(1,10)或random.randrange(1,10)生成路由路径时,访问对应URL会出现「Not Found」错误,但手动给变量赋值(如vartest=7)却能正常访问。
无法正常运行的代码
vartest=random.randint(1,10) urlsting="/"+str(vartest) print("urlsting is .......",urlsting) @app.route(urlsting) def homeFun(): return " Congrats!! :-) "
浏览器错误提示
Not Found The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
可正常运行的代码
vartest=7 urlsting="/"+str(vartest) print("urlsting is .......",urlsting) @app.route(urlsting) def homeFun(): return " Congrats!! :-) "
完整代码
from flask import Flask import random app= Flask(__name__) #Doesn't work vartest=random.randint(1,10) # or random.randrange(1,10) #______ #Works perfectly #vartest=7 urlsting="/"+str(vartest) print("urlsting is .......",urlsting) @app.route(urlsting) def homeFun(): return "Congrats!! :-) " if __name__=="__main__": app.run(host="0.0.0.0", port='8888',debug= True)
解决建议
问题根源:当前写法是在Flask应用启动时一次性生成固定随机路由,这个路由只会是1-10中的某一个值(启动时随机生成的那个),如果访问时输入了其他数字,自然会找不到路由。开启debug模式时,代码热重载还会重新生成随机数,导致路由再次变化。
方案一:支持所有1-10的数字路径(推荐)
使用Flask的动态路由,匹配1到10之间的整数路径:from flask import Flask import random app = Flask(__name__) @app.route('/<int:vartest>') def homeFun(vartest): # 校验路径是否在1-10范围内 if 1 <= vartest <= 10: return "Congrats!! :-) " else: return "无效路径", 404 if __name__ == "__main__": app.run(host="0.0.0.0", port='8888', debug=True)这样访问
/1到/10的任意路径都能正常返回,超出范围则返回404错误。方案二:固定启动时的随机路由
如果确实需要每次启动只生成一个随机路由,必须以控制台打印的路径为准访问:from flask import Flask import random app = Flask(__name__) vartest = random.randint(1,10) urlstring = "/" + str(vartest) print("可用路由:", urlstring) @app.route(urlstring) def homeFun(): return "Congrats!! :-) " if __name__ == "__main__": app.run(host="0.0.0.0", port='8888', debug=True)注意:每次重启应用,路由都会随机变化,用户无法提前预知路径,仅适用于特殊场景。
内容的提问来源于stack exchange,提问作者Liampour
相关产品推荐
相关产品推荐

