文章目录

  • 技术文档
    • 存储服务
    • 前端模板
  • 项目优化
    • 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主从:读写分离,热备份。主库(写:增删改) 从库(读: 查询)

数据库索引概念

索引存放在磁盘额位置,通过查询位置找到数据的物理位置(数据的存储方式如下图),增删改是需改变数据存储位置,降低性能
分库分表

项目总结

项目需求

  1. 用户模块

    • 注册

      • 用户账号默认为手机号
      • 图片验证码正确后才能发送短信验证码
      • 短信验证码每60秒可发送一次(redis缓存有效期 + celery异步发送短信)
      • 每个条件出错时有相应错误提示
    • 登录
      • 用手机号与密码登陆
      • 错误时有相应提示
    • 登出
      • 用户退出,清除session(此处由于CSRFProtect从session或获取csrf_token,所以退出时需要保留session中的csrf_token)
    • 实名认证
      • 实名认证只可进行一次
      • 提交认证信息后再次进入只能查看信息,不能修改
      • 认证信息包含姓名与身份证号
    • 个人信息修改
      • 可以修改个人头像
      • 可以修改用户名
      • 登陆手机号不能修改
      • 上传头像与用户名分开保存
      • 上传新头像后页面理解显示新头像
    • 我的爱家
      • 显示个人头像、手机号、用户名(用户名未设置时为用户手机号)
      • 提供修改个人信息的入口
      • 提供作为房客下单的查询入口
      • 提供成为房东所需实名认证的入口
      • 提供作为房东发布房屋信息的入口
      • 提供作为房东查询客户订单的入口
      • 提供退出的入口
  2. 房源模块

    • 主页

      • 最多5个房屋logo图片展示,点击可跳转至房屋详情页面
      • 提供登陆/注册入口,登陆后显示用户名,点击可跳转至个人中心
      • 用户可以选择城区、入住时间、离开时间等条件进行搜索
      • 城区的区域信息需动态加载
      • 最多5个房屋logo图片展示,点击可跳转至房屋详情页面
      • 提供登陆/注册入口,登陆后显示用户名,点击可跳转至个人中心
      • 用户可以选择城区、入住时间、离开时间等条件进行搜索
      • 城区的区域信息需动态加载
    • 发布房源
      • 需要用户填写全部房屋信息
      • 房屋的文字信息与图片分开操作
    • 我的房源(显示用户房源)
      • 未实名认证的用户不能发布新房源信息,需引导到实名认证页面
      • 按时间倒序显示已经发布的房屋信息
      • 点击房屋可以进入详情页面
      • 对实名认证的用户提供发布新房屋的入口
    • 房屋列表
      • 可根据入住离开时间、区域进行筛选,并可进行排序
      • 房屋信息分页加载
      • 区域信息动态加载
      • 筛选条件更新后,页面立即刷新
    • 房屋详情
      • 需展示的详细信息参考设计图
      • 提供预定入口
      • 若是房东本人查看房屋信息时,预定入口不显示
    • 房屋预订
      • 由用户确定入住时间
      • 根据用户确定的入住离开时间实时显示合计天数与总金额
      • 房东不可预订自己房源
  3. 订单模块

    • 我的订单(房客角色)

      • 按时间倒序显示订单信息
      • 订单完成后提供评价功能
      • 已评价的订单能看到评价信息
      • 被拒绝的订单能看到拒单原因
    • 客户订单(房东角色)
      • 按时间倒序显示用户下的订单
      • 对于新订单提供接单与拒单的功能
      • 拒单必须填写拒单原因
      • 若客户进行了订单评价,需显示
  4. 支付模块

    • 接入支付宝支付平台

      • 用户点击支付后跳转到支付宝支付页面(有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进行数据库迁移
    1. python mnange.py runserver 启动程序
    2. python manage.py db migrate -m ‘生成迁移文件’
    3. python manage.py db upgrade 迁移数据库
  • 利用flask-session + redis 进行session管理
  • 利用 falsk-wtf 进行 csrf 保护
  • 支付模块接入支付宝开放平台进行支付, 使用 python-alipay-sdk 包
  • 用户上传的图片和文件托管到 七牛云
  • 用户发送短信验证码使用 容联云平台
  • 发送短信验证码使用 celery 异步

简要开发步骤

  1. 分析项目需求
  2. 搭建项目文件目录结构
  3. 进行数据库设计
  4. 编写静态文件蓝图
  5. 用户模块
  6. 房屋模块
  7. 订单模块
  8. 支付模块
  9. 项目优化

新环境中运行步骤

  1. 运行 pip install -r requirements.txt 安装需要的python包

  2. 安装 mysql 和 redis 数据库,并在mysql中创建ihome数据库

  3. 修改项目中数据库配置文件

  4. 使用 python manage.py db migrate -m '生成数据库迁移文件'

  5. 使用 python manage.py db upgrade 迁移数据库

  6. 启动 redis 服务 redis-server /etc/redis.conf

  7. 启动项目 py manage.py runserver

爱家租房项目④-项目总结与优化相关推荐

  1. flask爱家租房项目开发(十三)

    本节文档下载地址:https://download.csdn.net/download/geek_xiong/11615541 目录 蚂蚁金服--支付宝的使用 订单支付 前后端代码编写 测试 蚂蚁金服 ...

  2. 爱家租房网站1-15博客地址

    flask爱家租房项目开发(一) flask项目的基本配置以及数据库的设计与迁移---->>>可以正常访问 flask爱家租房项目开发(二) 图片验证码的编写 flask爱家租房项目 ...

  3. Flask爱家租房--房屋管理(搜索房屋列表)

    文章目录 0.效果展示 1.后端接口 2.前端js 3.前端html 0.效果展示 1.后端接口 house.py部分接口: # GET /api/v1.0/houses?sd=2017-12-01& ...

  4. Flask爱家租房--房屋管理(获取房屋详情)

    文章目录 0.效果展示 1.思路总结 2.后端接口 3.前端js 4.前端html 0.效果展示 1.思路总结 1)房屋详情页面开始加载时,detail.js首先通过定义的函数(重点:document ...

  5. Flask爱家租房--订单(房东接单、拒单)

    文章目录 0.效果展示 1.效果展示 2.后端接口 3.前端js 4.前端html 0.效果展示 1.效果展示 1)当房东点击"客户订单",js向后端接口get_user_orde ...

  6. Flsak爱家租房--订单(获取用户订单、用户评论)

    文章目录 0.页面效果 1.思路总结 2.后端代码 3.前端js 4.前端html 0.页面效果 1.思路总结 1)用户点击"我的订单",js向后端获取数据,并加载在前端的模板中: ...

  7. Flask爱家租房--订单支付(支付过程)

    文章目录 0.支付流程 1. 重点总结 2.后端代码 3.前端js 4.前端html 0.支付流程 1. 重点总结 1)用户进入"我的订单"页面,点击"去支付" ...

  8. Flask爱家租房--房屋管理(获取主页幻灯片展示的房屋基本信息)

    文章目录 0.效果展示 1.重点总结 2.后端代码 3.前端js 4.前端html 0.效果展示 1.重点总结 1)当用户访问首页时,开始加载页面信息,此时index.js文件首先调用后端接口chec ...

  9. Flask爱家租房--房屋管理(获取房东发布的房源信息条目)

    文章目录 0.效果展示 1.重点总结 2.后端代码 3.前端html 4.前端js 0.效果展示 1.重点总结 1)用户点击"我的房源",页面开始加载,此时myhouse.js限定 ...

  10. Flask爱家租房--发布新房源(保存房屋基本信息)

    0.页面展示效果 1.后端代码 @api.route("/houses/info", methods=["POST"]) @login_required def ...

最新文章

  1. PHP语法分析器:RE2C BISON 总结
  2. win7计算机管理找不到文件夹,Win7系统打开组策略提示找不到文件gpedit.msc怎么办...
  3. 电击图片弹出无边自定义窗口
  4. 苹果折叠屏iPhone不会在明年推出 最快2025年出货
  5. 瑞士Migros Ostschweiz使用RFID和EPCIS优化供应链的可视化
  6. MongoDB学习笔记(四)--索引 性能优化
  7. javascript按中文首字母排序
  8. 复利计算——单元测试
  9. XUbuntu20.04开机logo定制,主题修改启动背景
  10. web sevice 生成代理类及使用
  11. 在html中如何写日期的代码,日期html代码
  12. java drawline_JAVA drawLine()方法怎么用?
  13. 适合计算机社团活动的游戏,适合大学社团活动“游戏”有哪些?
  14. erdas几何校正_erdas图像几何校正操作步骤指南
  15. 商业银行最全数据-66年跨度、100+指标(涵盖业务、股东、高管、员工、审计等数据)
  16. 一文读懂 Apache Pulsar详细解析和实战运用
  17. C语言之程序环境和预处理
  18. Linux vsftp
  19. 项目负责人的心得体会
  20. Beyond Compare中文乱码怎么办

热门文章

  1. python-tk身份证读取页面编写
  2. GeoServer发布PostGIS数据服务(地图工具篇.13)
  3. electron一键生成项目图标
  4. X86云游戏能玩王者荣耀方案
  5. Pascal语法小全
  6. 数量关系 判断推理 智力题
  7. idedvicesyslog ERROR: Could not start service com.apple.syslog_relay.
  8. 为什么说 TCP 协议是可靠的?
  9. 下载的GHOST重新系统之后,四个盘的硬盘分区变成了一个,(只剩下一个C盘,容量为整个硬盘的容量)以前的资料不见了
  10. unity3D实现地对空防御