从零打造 AI 智能租房系统:FastAPI + WebSocket + DIFY,让找房更聪明!
导语:你是否经历过租房的痛苦?信息不对称、中介套路深、沟通成本高……今天,我将带你一步步构建一个基于 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 编排
💡 小贴士:如果你是初学者,建议按照以下顺序学习本项目:
- 先跑通代码,理解整体架构
- 重点研读 auth.py 和 security.py,掌握认证逻辑
- 动手实现一个简单的 WebSocket 聊天室
- 尝试接入自己的 DIFY AI 应用
- 优化前端界面,添加更多交互细节
加油,下一个全栈工程师就是你!🚀
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)