项目介绍
需求分析原因:
可以整体的了解项目的业务流程和主要的业务需求。
项目中,需求驱动开发。即开发人员需要以需求为目标来实现业务逻辑。
需求分析方式:
企业中,借助 产品原型图 分析需求。
需求分析完后,前端按照产品原型图开发前端页面,后端开发对应的业务及响应处理。
需求分析内容:
页面及其业务流程和业务逻辑。

1、需求文档
需求功能
1 1. 主页
2 1.1 最多5个房屋logo图片展示,点击可跳转至房屋详情页面
3 1.2 提供登陆/注册入口,登陆后显示用户名,点击可跳转至个人中心
4 1.3 用户可以选择城区、入住时间、离开时间等条件进行搜索
5 1.4 城区的区域信息需动态加载
6
7 2. 注册
8 2.1 用户账号默认为手机号
9 2.2 图片验证码正确后才能发送短信验证码
10 2.3 短信验证码每60秒可发送一次
11 2.4 每个条件出错时有相应错误提示
12
13 3. 登陆
14 3.1 用手机号与密码登陆
15 3.2 错误时有相应提示
16
17 4. 房屋列表页
18 4.1 可根据入住离开时间、区域进行筛选,并可进行排序
19 4.2 房屋信息分页加载
20 4.3 区域信息动态加载
21 4.4 筛选条件更新后,页面立即刷新
22
23 5. 房屋详情页
24 5.1 需展示的详细信息参考设计图
25 5.2 提供预定入口
26 5.3 若是房东本人查看房屋信息时,预定入口不显示
27
28 6. 房屋预定
29 6.1 由用户确定入住时间
30 6.2 根据用户确定的入住离开时间实时显示合计天数与总金额
31
32 7. 我的爱家
33 7.1 显示个人头像、手机号、用户名(用户名未设置时为用户手机号)
34 7.2 提供修改个人信息的入口
35 7.3 提供作为房客下单的查询入口
36 7.4 提供成为房东所需实名认证的入口
37 7.5 提供作为房东发布房屋信息的入口
38 7.6 提供作为房东查询客户订单的入口
39 7.7 提供退出的入口
40
41 8. 个人信息修改
42 8.1 可以修改个人头像
43 8.2 可以修改用户名
44 8.3 登陆手机号不能修改
45 8.4 上传头像与用户名分开保存
46 8.5 上传新头像后页面理解显示新头像
47
48 9. 我的订单(房客)
49 9.1 按时间倒序显示订单信息
50 9.2 订单完成后提供评价功能
51 9.3 已评价的订单能看到评价信息
52 9.4 被拒绝的订单能看到拒单原因
53
54 10. 实名认证
55 10.1 实名认证只可进行一次
56 10.2 提交认证信息后再次进入只能查看信息,不能修改
57 10.3 认证信息包含姓名与身份证号
58
59 11. 我的房源
60 11.1 未实名认证的用户不能发布新房源信息,需引导到实名认证页面
61 11.2 按时间倒序显示已经发布的房屋信息
62 11.3 点击房屋可以进入详情页面
63 11.4 对实名认证的用户提供发布新房屋的入口
64
65 12. 发布新房源
66 12.1 需要用户填写全部房屋信息
67 12.2 房屋的文字信息与图片分开操作
68
69 13. 客户订单(房东)
70 13.1 按时间倒序显示用户下的订单
71 13.2 对于新订单提供接单与拒单的功能
72 13.3 拒单必须填写拒单原因
73 13.4 若客户进行了订单评价,需显示
74
75 14. 退出
76 14.1 提供退出功能
2. 项目主要页面介绍
3. 归纳项目主要模块
为了方便项目管理及多人协同开发,我们根据需求将功能划分为不同的模块。
将来在项目中,每个模块都会对应一个子应用进行管理和解耦。

大厂研发流程
https://juejin.im/post/6844904101910675464
项目架构设计
项目开发模式

说明
前后端不分离的开发模式,是为了提高搜索引擎排名,即SEO。特别是首页,详情页和列表页。
页面需要局部刷新:我们会选择使用AJAX来实现。
工程创建和配置
准备工作
创建虚拟环境
1 pipenv shell
安装Flask框架
1 pip install flask
创建Flask工程
配置开发环境
项目的环境分为开发环境和生产环境。
。开发环境:用于编写和调试项目代码。
。生产环境:用于项目线上部署运行。
新建配置文件
。准备配置文件目录
。准备开发环境配置内容
指定开发环境配置文件
配置MySQL数据库
配置数据库
1 USERNAME = 'root'
2 PASSWORD = 'root'
3 HOSTNAME = '127.0.0.1'
4 PORT = 3306
5 DATABASE = 'home'
6
7 # 数据库
8 SQLALCHEMY_DATABASE_URI = 'mysql+mysqlconnector://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
9 SQLALCHEMY_TRACK_MODIFICATIONS = False
安装所需模块
1 pip install flask_sqlalchemy
配置Redis数据库
数据缓存服务采用Redis数据库
安装redis扩展包
1 pip install redis
配置Redis数据库
1 # 创建Redis
2 redis_store = None
3 def creata_app(config_name):
4
5 # 使用app初始化db
6 db.init_app(app)
7
8 global redis_store
9 redis_store = redis.Redis(host=config_class.REDIS_HOST, port=config_class.REDIS_PORT)
配置工程日志
配置日志
1 def setup_log():
2 # 设置日志的的登记 DEBUG调试级别
3 logging.basicConfig(level=logging.DEBUG)
4 # 创建日志记录器,设置日志的保存路径和每个日志的大小和日志的总大小
5 file_log_handler = RotatingFileHandler("logs/log", maxBytes=1024*1024*100,backupCount=100)
6 # 创建日志记录格式,日志等级,输出日志的文件名 行数 日志信息
7 formatter = logging.Formatter("%(levelname)s %(filename)s: %(lineno)d %(message)s")
8 # 为日志记录器设置记录格式
9 file_log_handler.setFormatter(formatter)
10 # 为全局的日志工具对象(flaks app使用的)加载日志记录器
11 logging.getLogger().addHandler(file_log_handler)
12
日志目录
在项目目录下新建一个logs文件夹
日志记录器的使用
1 import logging
2
3 # 创建日志记录器
4 logger = logging.getLogger('django')
5 # 输出日志
6 logger.debug('测试logging模块debug')
7 logger.info('测试logging模块info')
8 logger.error('测试logging模块error')
配置前端静态文件
项目中需要使用静态文件,比如css,images,js等等
准备静态文件
在项目目录下新建一个static目录
指定静态文件加载文件
1
2 from flask import Blueprint, current_app, make_response
3
4 # 提供静态文件的蓝图
5 html = Blueprint('web_html', __name__)
6
7
8 @html.route("/<re(r'.*'):html_file_name>")
9 def get_html(html_file_name):
10 """提供HTML文件"""
11
12 # 如果html_file_name为"", 表示访问的路径是/ ,请求主页
13 if not html_file_name:
14 html_file_name = 'index.html'
15
16 # 如果资源名不是favicon.ico
17 # if html_file_name != "favicon.ico":
18 html_file_name = "html/" + html_file_name
19
20 return make_response(current_app.send_static_file(html_file_name))