一、数据库功能分析
- 用户可以登录及注册
- 用户可以发问题(标题,内容)
- 用户可以回答问题,关注问题
- 用户可以评论回答,点赞回答
二、蓝图
什么是蓝图
大型应用组织管理
模块化,组件化
一个项目有多个蓝图
蓝图实现过程
- 第一步 按模块拆分
- ORM 模型,配置,常量,工具类,功能模块等
- 第二步 视图文件中,实例化一个蓝图对象
- accounts = Blueprint('accounts',__name__,template_folder='templates',static_folder='static')
- 第三步 注册蓝图
- from accounts.views import accounts
- app.register_blueprint(accounts,url_prefix='/accounts'
2.1 在线问答系统蓝图改造
按模块进行改造
- 将登录,注册,个人中心放入到新建的accounts模块中
模块中新建templates文件夹和views.py文件
- 将首页,问题详情页,关注页,写回答页放入到新建的qa模块中
模块中新建templates文件夹和views.py文件
- 将app.py中的路由放入各自的views.py中
引入蓝图(Blueprint),实例化蓝图对象
accounts=Blueprint('accounts',__name__,template_folder='templates',static_folder='../assets')
- 将蓝图在app.py 中注册
app.register_blueprint(accounts,url_prefix='/accounts')
三、问题详情动态页面开发
第一步:使用模板语法将详情页改造
第二步:将需要展示评论,关注的信息从数据库取出
第三步:取出第一条回答,并展示出一共有多少条回答
四、登录注册
- Flask模板,表单验证,多个字段的验证
- 数据库操作
- python 中 hashlib
- Flask扩展的使用
- Flask-login的使用
- 用户登录的基本逻辑
4.1 用户注册页面开发
- 注册表单编写及验证
- 使用ORM保存用户信息
- flash消息闪现提示用户登录
4.2 用户注册表单验证
- 用户名为手机号码,且不能重复 (正则验证)
- 昵称长度验证 (Length=(min=2,max=20) )
- 密码及确认密码 (Equal_To)
hashlib加密 hashlib.sha256().hexdigest()
4.3 登录流程分析
- 登录表单输入用户名和密码
- 验证用户名和密码是否正确,执行登录操作
- 记录登录日志
- 跳转到上一次访问的页面或首页
4.4 实现登录功能
- Flask登录扩展的使用
- Flask-login
- Flask-Login — Flask-Login 0.3.2 documentation
五、问题发布功能开发
- 实现表单发布和验证
- 支持上传“题图”
安装flask-ckeditor
配置Ckeditor并提交
六、分页异步加载数据
API 应用程序接口 (对内部业务逻辑的封装)
- 第一步:后端 视图层 编写数据接口
- 第二步:前端 模板层 调用数据接口
- 第三步:渲染页面、绑定功能
七、Flask-RESTFUL使用
- REST是设计API的模式
- 是一种网络应用程序的设计风格和开发方式
- Flask-RESTful — Flask-RESTful 0.3.1 documentation
restful的特点
- 每一个url都是一种资源
- 更纯净的url
- 用不同的HTTP请求方式来操作它
类型 描述 POST 新增 GET 查询 PUT/PATCH 修改 DELETE 删除
更精简的方式处理结果
状态码 | 描述 | 请求方式 |
200 | OK | GET |
201 | CREATED | POST/PUT/PATCH |
204 | NO CONTENT | DELETE |
400 | INVALID REQUEST | POST/PUT/PATCH |
404 | NOT FOUND | * |
500 | INTERNAL SERVER ERROR | * |
八、添加回答
- 构造回答表单
- 保存表单数据到Answer中,将回答对话框变为富文本
- 将回答提交到文章详情,并给Flash消息提示回答成功
九、首页回答列表
- 在视图中准备数据(回答列表)
- 在HTML模板中替换动态内容(列表循环)
- 页面效果实现(概要信息显示及切换)
- 分页的实现思路
十、答案评论功能开发
十一、评论及回复列表加载
- 取评论列表数据,并循环改造
- 计算创建时间和现在时间的差值 (timeago)
- 评论下的回复列表
十二、异步加载评论列表
- 分页取评论数据
- 使用异步加载的方式更新评论信息
- 给‘上一页’,‘下一页’绑定事件