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

汽车租赁网站个性化功能故障:用户无法查看自身预订记录

问题排查与修复方案

后端部分

  • 先确认Flask的session配置:必须设置SECRET_KEY才能让session正常工作,后端初始化代码里得加上app.secret_key = '随机字符串',不然session存不住用户ID
  • 登录接口的session写入验证:登录成功后执行session['user_id'] = user.id之后,打印session.get('user_id')看看是不是真的存进去了,避免因为逻辑分支问题没执行到这行
  • 新增用户专属预订查询接口:写一个GET接口,从session里取user_id,再去预订表查匹配的记录
    @app.route('/api/my-bookings', methods=['GET'])
    def get_my_bookings():
        user_id = session.get('user_id')
        if not user_id:
            return jsonify({'msg': '请先登录'}), 401
        # 查询当前用户的所有预订
        bookings = Booking.query.filter_by(user_id=user_id).all()
        # 转换为可JSON序列化的格式
        result = []
        for b in bookings:
            result.append({
                'id': b.id,
                'car_model': b.car.model,  # 如果关联了车辆表可以加上
                'start_date': b.start_date.strftime('%Y-%m-%d'),
                'end_date': b.end_date.strftime('%Y-%m-%d')
            })
        return jsonify(result)
    
  • 跨域配置要带credentials:如果前后端端口不一样,用flask-cors的话必须设supports_credentials=True,不然session cookie传不过去,代码示例:
    from flask_cors import CORS
    CORS(app, supports_credentials=True)
    

前端部分

  • HTTP请求必须带credentials:Angular里所有和用户状态相关的请求(登录、查预订)都要加withCredentials: true,不然后端拿不到session
    预订服务里的查询方法:
    getMyBookings(): Observable<Booking[]> {
      return this.http.get<Booking[]>('/api/my-bookings', { withCredentials: true });
    }
    
    登录请求也要加:
    login(loginData: any): Observable<any> {
      return this.http.post('/api/login', loginData, { withCredentials: true });
    }
    
  • 预订组件的渲染逻辑:在组件初始化时调用查询方法,拿到数据后渲染
    myBookings: Booking[] = [];
    
    ngOnInit(): void {
      this.bookingService.getMyBookings().subscribe({
        next: (data) => {
          this.myBookings = data;
        },
        error: (err) => {
          console.log('获取预订记录出错:', err);
          // 这里可以加未登录的提示,比如跳转到登录页
        }
      });
    }
    
  • 验证用户登录状态:可以在AuthService里加个方法,调用后端的验证接口(比如/api/check-login)确认用户是否已登录,避免未登录时请求预订记录

数据库关联检查

  • 确认预订表的user_id字段是外键关联用户表主键的,创建表时的代码要正确:
    class Booking(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
        # 其他字段(比如车辆ID、日期等)
        # 关联用户表,方便反向查询
        user = db.relationship('User', backref=db.backref('bookings', lazy='joined'))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:32:02