Flask 动态路由采用我未指定的值
Flask dynamic route is taking values which I have not specified
问题
我在 Flask
app.py 文件中创建了一个动态路由 /update/<randomString>
,其中 randomString
是随机生成的字符串,长度为 50。但是,如果我搜索 /update/1
,我可以毫无错误地查看相同的动态路由 /update/<randomString>
!谁能解释为什么会这样?
看看我到目前为止尝试了什么:
@app.route('/')
def index():
randomString = ''.join(secrets.choice(string.ascii_uppercase+string.digits+string.ascii_lowercase) for k in range (50))
session['randomString'] = str(randomString)
return render_template('index.html')
@app.route('/update/<randomString>')
def update(randomString):
if 'randomString' in session:
randomString = session['randomString']
return render_template('update.html')
else:
return 'error...'
Link的动态页面在update.html页,其中随机字符串是在session的帮助下传递的(定义在index.html页)。
<a href="update/{{randomString}}">Dynamic page</a>
编辑:当我点击上面定义的 link 并且我的 URL 部分显示那个长的 randomString 时,我也能够查看动态路由。问题是:当我搜索 http://127.0.0.1:5000/update/1
时,我可以访问相同的路线
截图一
截图二
在存储随机字符串时,您使用的密钥是randomString
。所以你将随机字符串存储在像
这样的字典中
session['randomString'] = '1234567890'
然后,当您在 /update
路由中访问会话时,您只是在检查会话是否具有名为 randomString 的密钥。您还应该检查 session['randomString'] == '1234567890'
并仅在会话中的随机字符串与您在 /
路径中创建的字符串相同时才呈现页面。您可以将 if 替换为
if 'randomString' in session and session['randomString'] == randomString :
问题
我在 Flask
app.py 文件中创建了一个动态路由 /update/<randomString>
,其中 randomString
是随机生成的字符串,长度为 50。但是,如果我搜索 /update/1
,我可以毫无错误地查看相同的动态路由 /update/<randomString>
!谁能解释为什么会这样?
看看我到目前为止尝试了什么:
@app.route('/')
def index():
randomString = ''.join(secrets.choice(string.ascii_uppercase+string.digits+string.ascii_lowercase) for k in range (50))
session['randomString'] = str(randomString)
return render_template('index.html')
@app.route('/update/<randomString>')
def update(randomString):
if 'randomString' in session:
randomString = session['randomString']
return render_template('update.html')
else:
return 'error...'
Link的动态页面在update.html页,其中随机字符串是在session的帮助下传递的(定义在index.html页)。
<a href="update/{{randomString}}">Dynamic page</a>
编辑:当我点击上面定义的 link 并且我的 URL 部分显示那个长的 randomString 时,我也能够查看动态路由。问题是:当我搜索 http://127.0.0.1:5000/update/1
截图一
截图二
在存储随机字符串时,您使用的密钥是randomString
。所以你将随机字符串存储在像
session['randomString'] = '1234567890'
然后,当您在 /update
路由中访问会话时,您只是在检查会话是否具有名为 randomString 的密钥。您还应该检查 session['randomString'] == '1234567890'
并仅在会话中的随机字符串与您在 /
路径中创建的字符串相同时才呈现页面。您可以将 if 替换为
if 'randomString' in session and session['randomString'] == randomString :