导语:你是否经历过租房的痛苦?信息不对称、中介套路深、沟通成本高……今天,我将带你一步步构建一个基于 FastAPI 的 AI 智能租房系统,用技术解决真实痛点,让找房变得简单又智能!

一、项目背景:为什么要做这个系统?

1.1、传统租房的三大痛点

  • 信息不对称:房源真假难辨,价格不透明
  • 效率低下:手动筛选海量房源,耗时耗力
  • 沟通成本高:反复咨询中介,响应慢且体验差

1.2、我们的解决方案

通过 AI 赋能 + 实时交互 + 智能推荐,打造一个让用户"一句话找到理想房源"的智能平台:

  • AI 智能问答:集成 DIFY,自然语言对话式找房
  • 实时消息推送:WebSocket 实现房源更新即时通知
  • 个性化推荐:基于用户偏好智能匹配房源
  • 全流程管理:从浏览、收藏到下单,一站式搞定

二、技术架构:前后端分离的现代化设计

2.1、整体架构图

前端 (HTML/CSS/JS) ←→ FastAPI 后端 ←→ MySQL 数据库
                              ↑
                        WebSocket 实时通信
                              ↑
                         DIFY AI 助手

2.2、核心技术栈

后端技术:

  • FastAPI:高性能异步 Web 框架,自动生成交互式 API 文档
  • SQLAlchemy:Python ORM 框架,优雅操作数据库
  • MySQL:关系型数据库,存储用户、房源、订单等核心数据
  • JWT (JSON Web Token):无状态身份认证,保障接口安全
  • bcrypt:密码加密算法,防止明文存储
  • WebSocket:双向实时通信,推送房源更新、聊天消息

前端技术:

  • 原生 HTML/CSS/JavaScript:轻量级实现,无需复杂构建工具
  • Font Awesome:图标库,提升界面美观度
  • 响应式设计:适配 PC 和移动端

AI 集成:

  • DIFY:开源 LLM 应用开发平台,快速接入智能对话能力
  • httpx:异步 HTTP 客户端,调用 DIFY API

2.3、项目结构

renting_house/
├── app/
│   ├── api/              # API 路由层
│   │   ├── auth.py       # 认证接口
│   │   ├── house.py      # 房源接口
│   │   ├── order.py      # 订单接口
│   │   ├── ai_chat.py    # AI 对话接口
│   │   └── websocket.py  # WebSocket 连接
│   ├── core/             # 核心配置
│   │   ├── config.py     # 环境变量管理
│   │   ├── database.py   # 数据库连接
│   │   ├── security.py   # JWT 加密解密
│   │   └── websocket_manager.py  # WebSocket 连接管理
│   ├── models/           # 数据模型
│   ├── schemas/          # Pydantic 数据验证
│   ├── services/         # 业务逻辑层
│   ├── crud/             # 数据库操作层
│   └── utils/            # 工具函数
├── frontend/             # 前端页面
│   ├── index.html        # 主页面
│   ├── admin.html        # 管理后台
│   ├── css/style.css     # 样式文件
│   └── js/app.js         # 前端逻辑
└── .env                  # 环境配置文件

三、核心功能详解

3.1、用户认证系统:安全可靠的身份管理

3.1.1、注册流程

@router.post("/register")
async def register_user(user: UserCreate, db: Session = Depends(get_db)):
    return register(db, user)

关键技术点:

  • 密码加密:使用 bcrypt 对密码进行哈希处理,即使数据库泄露也无法还原明文
  • 用户名唯一性:数据库层面设置 unique=True,防止重复注册
  • JWT Token 生成:登录成功后返回包含用户 ID 的 Token,有效期 30 分钟

3.1.2、登录与鉴权

@router.get("/me")
async def get_me(current_user: User = Depends(get_current_user)):
    return ApiResponse(
        code=ResponseCode.SUCCESS,
        message="获取成功",
        data=UserResponse.model_validate(current_user)
    )

依赖注入机制:通过 Depends(get_current_user) 自动验证 Token,未登录或 Token 过期直接返回 401

3.2、房源管理系统:灵活高效的 CRUD 操作

3.2.1、房源数据模型

class House(Base):
    __tablename__ = "houses"
   
    id = Column(Integer, primary_key=True)
    title = Column(String(200), nullable=False)        # 房源标题
    city = Column(String(50), nullable=False)          # 城市
    address = Column(String(255))                      # 详细地址
    price = Column(Float, nullable=False)              # 月租金
    bedroom = Column(Integer, nullable=False)          # 卧室数量
    area = Column(Float)                               # 面积
    description = Column(Text)                         # 描述

3.2.2、多条件筛选

支持按城市、居室、价格区间、租赁方式等多维度筛选

3.3、AI 智能问答:DIFY 赋能的找房助手

3.3.1、核心实现

async def chat_with_ai(message: ChatMessage) -> ApiResponse:
    headers = {
        "Authorization": f"Bearer {settings.DIFY_API_KEY}",
        "Content-Type": "application/json"
    }
   
    # 调用 DIFY 工作流 API
    data = {
        "inputs": {"question": message.message},
        "user": str(message.user_id)
    }
    endpoint = f"{settings.DIFY_API_URL}/workflows/run"
   
    async with httpx.AsyncClient() as client:
        response = await client.post(endpoint, headers=headers, json=data, timeout=60)
        result = response.json()
        answer = result.get("data", {}).get("outputs", {}).get("text")
       
        return ApiResponse(code=ResponseCode.SUCCESS, data=ChatResponse(answer=answer))

使用场景

  • "帮我找一套北京朝阳区的两居室,预算 5000 以内" → AI 解析需求并推荐房源
  • "这个小区周边有地铁吗?" → AI 结合房源信息智能回答
  • "租房需要注意什么?" → AI 提供租房攻略

3.4、WebSocket 实时通信:即时推送不再轮询

连接管理

@router.websocket("/ws/houses")
async def websocket_houses(websocket: WebSocket, token: str = Query(None)):
    user_id = await get_user_from_token(token)
    await manager.connect(websocket, channel="houses", user_id=user_id)
   
    try:
        while True:
            data = await websocket.receive_text()
            message = json.loads(data)
            if message.get("type") == "ping":
                await websocket.send_json({"type": "pong"})
    except WebSocketDisconnect:
        manager.disconnect(websocket, channel="houses", user_id=user_id)

应用场景

  • 房源上新通知:管理员发布新房源,订阅用户立即收到推送
  • 实时聊天:租客与房东在线沟通,消息秒达
  • 收藏变动提醒:关注的房源价格调整或下架时通知用户

3.5、管理员后台:强大的运营管控

  • 用户管理:查看用户列表、封禁违规账号
  • 房源审核:上架/下架房源、编辑房源信息
  • 订单统计:查看成交数据、生成报表
  • 操作日志:记录所有关键操作,便于追溯

四、安全与部署:生产级最佳实践

4.1安全防护措施

4.1.1、JWT 认证 + bcrypt 加密

def create_access_token(data: dict, expires_delta: timedelta = None):
    to_encode = data.copy()
    expire = datetime.utcnow() + (expires_delta or timedelta(minutes=30))
    to_encode.update({"exp": expire})
    return jwt.encode(to_encode, settings.SECRET_KEY, algorithm=settings.ALGORITHM)

双重保障:

  • Token 过期机制(默认 30 分钟)
  • 密码 bcrypt 哈希(加盐 + 多轮迭代)

4.1.1、权限控制

def require_admin(current_user: User = Depends(get_current_user)):
    if not current_user.is_admin:
        raise HTTPException(status_code=403, detail="需要管理员权限")
    return current_user

4.1.3、CORS 跨域配置

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 生产环境应指定具体域名
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"]
)

4.2、环境配置

.env 文件示例:

DATABASE_URL=mysql+mysqlconnector://root:mysql123@localhost:3306/Renting_house
SECRET_KEY=01b843b0d756983feeb4020e7da98a83d1baec41d4b5ae48c57bd39116a9f77b
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
DIFY_API_KEY=app-opCUEaulTyglNcMAttSK5l4T
DIFY_API_URL=http://localhost/v1
APP_PORT=8080

4.3、部署流程

1. 安装依赖

pip install -r requirements.txt

2. 初始化数据库

Base.metadata.create_all(bind=engine)  # 自动创建表结构

3. 启动服务

uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload

4. 访问应用

前端页面:http://localhost:8080
API 文档:http://localhost:8080/docs(Swagger UI 自动生成)

五、项目亮点:为什么这个项目值得学习?

5.1、AI 赋能智能找房

传统租房平台只能被动筛选,我们引入 DIFY AI 助手,实现自然语言理解用户需求、智能推荐匹配房源、7×24 小时在线答疑

5.2、WebSocket 实时推送

告别低效的前端轮询,通过 WebSocket 长连接实现毫秒级消息推送、降低服务器压力、提升用户体验

5.3、高可用架构设计

分层架构(API 层 → Service 层 → CRUD 层)、依赖注入(FastAPI 的 Depends 机制)、异步处理(全面使用 async/await)

5.4、用户友好交互

单页应用体验(无刷新切换页面)、响应式设计(完美适配手机、平板、PC)、视觉反馈(加载动画、Toast 提示、空状态展示)

六、总结与展望

6.1、项目价值

这个项目不仅是一个租房平台,更是现代 Web 开发技术的综合实践:

  • FastAPI 异步编程:掌握高性能后端开发
  • JWT 认证体系:理解无状态身份验证
  • WebSocket 实时通信:学会双向消息推送
  • AI 应用集成:体验 LLM 赋能传统行业
  • 前后端分离架构:培养工程化思维

6.2、可扩展方向

  • 智能推荐算法:基于用户行为协同过滤推荐
  • 地图找房:集成高德/百度地图,可视化选房
  • VR 看房:对接全景图片,沉浸式体验
  • 微服务改造:拆分为用户服务、房源服务、订单服务
  • 容器化部署:Docker + Kubernetes 编排

💡 小贴士:如果你是初学者,建议按照以下顺序学习本项目:

  1. 先跑通代码,理解整体架构
  2. 重点研读 auth.py 和 security.py,掌握认证逻辑
  3. 动手实现一个简单的 WebSocket 聊天室
  4. 尝试接入自己的 DIFY AI 应用
  5. 优化前端界面,添加更多交互细节

加油,下一个全栈工程师就是你!🚀

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐