You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python-Bottle框架如何禁止用户直接输入URL跳过前置页面访问

Bottle路由前置访问控制实现方案

完全可以通过你已经集成的bottle_session插件实现该访问控制,不需要额外引入其他组件,实现逻辑如下:

  • 彻底弃用全局变量存储用户表单参数的写法:全局变量为服务端所有用户共享,并发场景下会出现不同用户数据串扰的问题,所有跨路由的用户级临时数据统一存入session。
  • 在/viewtrips路由的业务逻辑最前端增加必填参数校验:检查session中是否存在destination、date两个核心依赖参数,若任意参数缺失,直接重定向回首页/,不执行后续的函数调用、模板渲染逻辑,从根源避免空参数导致的页面渲染错误。
  • 可选优化:校验不通过时可在session中写入提示信息,首页渲染时读取该信息展示给用户,明确告知用户需要先完成首页表单提交。

修正后可直接运行的代码

1. 修正项目初始化导入问题

你当前代码中存在导入错误,from requests import session这行代码会导入requests库的session对象,和bottle_session注入到路由上下文的session对象冲突,直接删除这行导入即可。

2. 修正后的根路由/代码

@route('/', method=['GET', 'POST'])
def homepage():
  if request.method == 'POST':
    planet = request.forms.get('destination')  
    dateTime = request.forms.get('date')
    # 表单参数存入session
    session['destination'] = planet
    session['date'] = dateTime
    redirect('/viewtrips')
  else:
    return template('templateHome')

3. 增加访问校验后的/viewtrips路由代码

@route('/viewtrips', method=['GET', 'POST'])
def viewTrips():
    # 前置访问校验:核心参数缺失时直接跳转回首页
    if 'destination' not in session or 'date' not in session:
        redirect('/')
    
    # 校验通过后读取参数执行业务逻辑
    formPlanet = session['destination']
    formDateTime = session['date']
    flighttime = flightTime(formPlanet)
    gifPlanet = gifplanet(formPlanet)
    planet = formPlanet
    datetime = formDateTime
    basePrice = planetPrice(formPlanet)

    if request.method == 'POST':
        seat = request.forms.get('seating')
        food = request.forms.get('food')
        # 座位、餐食参数同样存入session,不要用全局变量
        session['seating'] = seat
        session['food'] = food
        redirect('/information')                

    return template('templateBooking', flighttime = flighttime, datetime = datetime, gifPlanet = gifPlanet, basePrice = basePrice, destination = planet)

补充说明

  • 该校验逻辑同样适用于后续的/information路由,只需要在路由入口检查session中是否存在seating、food等前置步骤提交的参数,缺失时重定向到/viewtrips即可,实现全流程的访问控制。
  • 你配置的session cookie有效期为600秒,用户停留超过10分钟后session会自动过期,此时访问/viewtrips也会被自动重定向回首页,符合业务逻辑。

内容的提问来源于stack exchange,提问作者ed190

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:18:19