爱家租房项目④-项目总结与优化
文章目录
- 技术文档
- 存储服务
- 前端模板
- 项目优化
- 01_csrf_token缺失bug的解决
- 02_数据库优化介绍1
- 表结构设计
- Django优化
- 数据库优化
- 外键保证数据的完整性
- 当数据量大的时候,需要去除外键
- 慢查询:
- mysql主从:读写分离,热备份。主库(写:增删改) 从库(读: 查询)
- 数据库索引概念
- 项目总结
- 项目需求
- 项目结构
- 相关技术
- 简要开发步骤
- 新环境中运行步骤
技术文档
存储服务
前端模板
http://aui.github.io/art-template/docs/index.html
项目优化
01_csrf_token缺失bug的解决
flask项目是用flask_wtf的csrf 创建的csrf_token的时候,自动会在session中存放一个值,项目的session存放在redis中,则redis中存在该值。
在cookie中,前开发工程师也把csrf_token存放了一份在cookie中,
#创建一个csrf_token值
csrf_token=csrf.generate_csrf()
# 设置cookie值
resp.set_cookie("csrf_token", csrf_token)
flask_wtf的CSRFProtect(app)进行保护的时候,实则是从session中读取csrf_token值,与前端请求数据中的headers中传过来的csrf_token进行比较。
当退出清除session时,csrf_token值也一起删除了,而浏览器再次加载页面时,由于浏览器缓存机制,是通过浏览器的缓存访问页面,并未经过后台,所以不会再生成csrf_token,也不会存放在redis的session中,导致csrf机制报错.
当然,清空缓存,刷新后,则可以再次登录,但这不是个解决办法。
在不破坏原有代码体系上,即 依旧使用flask_wtf的csrf机制,
可以在清空session前,获取csrf_token的值,清空后再加上。
退出登录时,执行
csrf_token=session.get('csrf_token')
session.clear()
session['csrf_token']=csrf_token
02_数据库优化介绍1
表结构设计
- 用空间换时间:适当增加冗余字段节省查询开销,如设计房屋出租总数,按其排序
- 三范式:
Django优化
数据库优化
将orm模型类的查找慢的,手写Sql,
使用索引,sql语句遵循关键字最左原则
联合索引要求更严格,要求顺序跟建表时一样
外键保证数据的完整性
父表无法删除其内容,因为有外键所在的子表。如果想删除父表中的记录,可以使用cascade级联,父表某一值删除,直接删除与其关联的全部数据。
当数据量大的时候,需要去除外键
原因:索引与外键中,查询、关联提高,但是维护外键需要额外的开销,影响性能
慢查询:
https://www.cnblogs.com/yfbk/p/9761866.html
https://www.jianshu.com/p/ca0e48d83130
mysql主从:读写分离,热备份。主库(写:增删改) 从库(读: 查询)
数据库索引概念
索引存放在磁盘额位置,通过查询位置找到数据的物理位置(数据的存储方式如下图),增删改是需改变数据存储位置,降低性能
分库分表
项目总结
项目需求
用户模块
- 注册
- 用户账号默认为手机号
- 图片验证码正确后才能发送短信验证码
- 短信验证码每60秒可发送一次(redis缓存有效期 + celery异步发送短信)
- 每个条件出错时有相应错误提示
- 登录
- 用手机号与密码登陆
- 错误时有相应提示
- 登出
- 用户退出,清除session(此处由于CSRFProtect从session或获取csrf_token,所以退出时需要保留session中的csrf_token)
- 实名认证
- 实名认证只可进行一次
- 提交认证信息后再次进入只能查看信息,不能修改
- 认证信息包含姓名与身份证号
- 个人信息修改
- 可以修改个人头像
- 可以修改用户名
- 登陆手机号不能修改
- 上传头像与用户名分开保存
- 上传新头像后页面理解显示新头像
- 我的爱家
- 显示个人头像、手机号、用户名(用户名未设置时为用户手机号)
- 提供修改个人信息的入口
- 提供作为房客下单的查询入口
- 提供成为房东所需实名认证的入口
- 提供作为房东发布房屋信息的入口
- 提供作为房东查询客户订单的入口
- 提供退出的入口
- 注册
房源模块
- 主页
- 最多5个房屋logo图片展示,点击可跳转至房屋详情页面
- 提供登陆/注册入口,登陆后显示用户名,点击可跳转至个人中心
- 用户可以选择城区、入住时间、离开时间等条件进行搜索
- 城区的区域信息需动态加载
- 最多5个房屋logo图片展示,点击可跳转至房屋详情页面
- 提供登陆/注册入口,登陆后显示用户名,点击可跳转至个人中心
- 用户可以选择城区、入住时间、离开时间等条件进行搜索
- 城区的区域信息需动态加载
- 发布房源
- 需要用户填写全部房屋信息
- 房屋的文字信息与图片分开操作
- 我的房源(显示用户房源)
- 未实名认证的用户不能发布新房源信息,需引导到实名认证页面
- 按时间倒序显示已经发布的房屋信息
- 点击房屋可以进入详情页面
- 对实名认证的用户提供发布新房屋的入口
- 房屋列表
- 可根据入住离开时间、区域进行筛选,并可进行排序
- 房屋信息分页加载
- 区域信息动态加载
- 筛选条件更新后,页面立即刷新
- 房屋详情
- 需展示的详细信息参考设计图
- 提供预定入口
- 若是房东本人查看房屋信息时,预定入口不显示
- 房屋预订
- 由用户确定入住时间
- 根据用户确定的入住离开时间实时显示合计天数与总金额
- 房东不可预订自己房源
- 主页
订单模块
- 我的订单(房客角色)
- 按时间倒序显示订单信息
- 订单完成后提供评价功能
- 已评价的订单能看到评价信息
- 被拒绝的订单能看到拒单原因
- 客户订单(房东角色)
- 按时间倒序显示用户下的订单
- 对于新订单提供接单与拒单的功能
- 拒单必须填写拒单原因
- 若客户进行了订单评价,需显示
- 我的订单(房客角色)
支付模块
- 接入支付宝支付平台
- 用户点击支付后跳转到支付宝支付页面(有app的直接打开app)
- 支付完成后,回到订单页面,并更改订单状态
- 接入支付宝支付平台
项目结构
ihome # 总项目目录
├── README.md
├── config.py # 项目配置文件
├── ihome # 业务文件包, 包含项目的业务黛安
│ ├── __init__.py
│ ├── blueprints # 蓝图
│ │ ├── __init__.py
│ │ └── view.py # 蓝图视图
│ ├── db.py # 数据库配置
│ ├── libs # 不通过pip,额外导入的工具文件
│ ├── models.py # 模型
│ ├── static # 静态文件夹
│ └── utils # 自定义的工具文件夹
├── manage.py # 包装的利用命令行启动项目的文件
└── setup.py # 部署文件
相关技术
- 主题框架使用flask框架,前后端分离的设计模式
- mysql数据库,利用flask-sqlalchemy插件链接
- 利用flask-script插件进行命令行操作, flask-migrate进行数据库迁移
- python mnange.py runserver 启动程序
- python manage.py db migrate -m ‘生成迁移文件’
- python manage.py db upgrade 迁移数据库
- 利用flask-session + redis 进行session管理
- 利用 falsk-wtf 进行 csrf 保护
- 支付模块接入支付宝开放平台进行支付, 使用 python-alipay-sdk 包
- 用户上传的图片和文件托管到 七牛云
- 用户发送短信验证码使用 容联云平台
- 发送短信验证码使用 celery 异步
简要开发步骤
- 分析项目需求
- 搭建项目文件目录结构
- 进行数据库设计
- 编写静态文件蓝图
- 用户模块
- 房屋模块
- 订单模块
- 支付模块
- 项目优化
新环境中运行步骤
运行
pip install -r requirements.txt
安装需要的python包安装 mysql 和 redis 数据库,并在mysql中创建ihome数据库
修改项目中数据库配置文件
使用
python manage.py db migrate -m '生成数据库迁移文件'
使用
python manage.py db upgrade
迁移数据库启动 redis 服务
redis-server /etc/redis.conf
启动项目
py manage.py runserver
爱家租房项目④-项目总结与优化相关推荐
- flask爱家租房项目开发(十三)
本节文档下载地址:https://download.csdn.net/download/geek_xiong/11615541 目录 蚂蚁金服--支付宝的使用 订单支付 前后端代码编写 测试 蚂蚁金服 ...
- 爱家租房网站1-15博客地址
flask爱家租房项目开发(一) flask项目的基本配置以及数据库的设计与迁移---->>>可以正常访问 flask爱家租房项目开发(二) 图片验证码的编写 flask爱家租房项目 ...
- Flask爱家租房--房屋管理(搜索房屋列表)
文章目录 0.效果展示 1.后端接口 2.前端js 3.前端html 0.效果展示 1.后端接口 house.py部分接口: # GET /api/v1.0/houses?sd=2017-12-01& ...
- Flask爱家租房--房屋管理(获取房屋详情)
文章目录 0.效果展示 1.思路总结 2.后端接口 3.前端js 4.前端html 0.效果展示 1.思路总结 1)房屋详情页面开始加载时,detail.js首先通过定义的函数(重点:document ...
- Flask爱家租房--订单(房东接单、拒单)
文章目录 0.效果展示 1.效果展示 2.后端接口 3.前端js 4.前端html 0.效果展示 1.效果展示 1)当房东点击"客户订单",js向后端接口get_user_orde ...
- Flsak爱家租房--订单(获取用户订单、用户评论)
文章目录 0.页面效果 1.思路总结 2.后端代码 3.前端js 4.前端html 0.页面效果 1.思路总结 1)用户点击"我的订单",js向后端获取数据,并加载在前端的模板中: ...
- Flask爱家租房--订单支付(支付过程)
文章目录 0.支付流程 1. 重点总结 2.后端代码 3.前端js 4.前端html 0.支付流程 1. 重点总结 1)用户进入"我的订单"页面,点击"去支付" ...
- Flask爱家租房--房屋管理(获取主页幻灯片展示的房屋基本信息)
文章目录 0.效果展示 1.重点总结 2.后端代码 3.前端js 4.前端html 0.效果展示 1.重点总结 1)当用户访问首页时,开始加载页面信息,此时index.js文件首先调用后端接口chec ...
- Flask爱家租房--房屋管理(获取房东发布的房源信息条目)
文章目录 0.效果展示 1.重点总结 2.后端代码 3.前端html 4.前端js 0.效果展示 1.重点总结 1)用户点击"我的房源",页面开始加载,此时myhouse.js限定 ...
- Flask爱家租房--发布新房源(保存房屋基本信息)
0.页面展示效果 1.后端代码 @api.route("/houses/info", methods=["POST"]) @login_required def ...
最新文章
- PHP语法分析器:RE2C BISON 总结
- win7计算机管理找不到文件夹,Win7系统打开组策略提示找不到文件gpedit.msc怎么办...
- 电击图片弹出无边自定义窗口
- 苹果折叠屏iPhone不会在明年推出 最快2025年出货
- 瑞士Migros Ostschweiz使用RFID和EPCIS优化供应链的可视化
- MongoDB学习笔记(四)--索引 性能优化
- javascript按中文首字母排序
- 复利计算——单元测试
- XUbuntu20.04开机logo定制,主题修改启动背景
- web sevice 生成代理类及使用
- 在html中如何写日期的代码,日期html代码
- java drawline_JAVA drawLine()方法怎么用?
- 适合计算机社团活动的游戏,适合大学社团活动“游戏”有哪些?
- erdas几何校正_erdas图像几何校正操作步骤指南
- 商业银行最全数据-66年跨度、100+指标(涵盖业务、股东、高管、员工、审计等数据)
- 一文读懂 Apache Pulsar详细解析和实战运用
- C语言之程序环境和预处理
- Linux vsftp
- 项目负责人的心得体会
- Beyond Compare中文乱码怎么办
热门文章
- python-tk身份证读取页面编写
- GeoServer发布PostGIS数据服务(地图工具篇.13)
- electron一键生成项目图标
- X86云游戏能玩王者荣耀方案
- Pascal语法小全
- 数量关系 判断推理 智力题
- idedvicesyslog ERROR: Could not start service com.apple.syslog_relay.
- 为什么说 TCP 协议是可靠的?
- 下载的GHOST重新系统之后,四个盘的硬盘分区变成了一个,(只剩下一个C盘,容量为整个硬盘的容量)以前的资料不见了
- unity3D实现地对空防御