基于Flask开发企业级REST API应用(一)
关于我
编程界的一名小小程序猿,目前在一个创业团队任team lead,技术栈涉及Android、Python、Java和Go,这个也是我们团队的主要技术栈。
Github:github.com/hylinux1024
微信公众号:angrycode
前面对Python WEB
框架Flask
的源码进行走读,对服务的启动流程、路由原理和模板渲染有了一个宏观的认识。不过说了那么多理论,接下来就利用Flask
开发一个企业级的API
应用。
我选用团队最近开发的一个企业应用作为案例。这是一个恋爱交友应用,本来是使用Java
的SpringBoot
框架进行开发的,不过为了避免不必要的麻烦,我会使用Flask
进行改造,当然这个案例我还会精简一下,保持核心业务的同时,重点关注其中涉及到的技术和工具库的使用,最大限度的还原项目开发的完整流程。
0x00 技术栈
这里我们使用Python
版本为3.7,WEB
框架当然就是Flask
,数据库使用MySql
,ORM
使用SqlAlchemy
,使用Redis
作为缓存,可能还会使用到序列化工具库marshmallow
。
开发环境使用venv
,部署服务环境会使用nginx+gunicorn+supervisord
因此整个技术栈为
# 开发技术栈
Python3.7+venv+Flask+MySql+SqlAlchemy+Redis+marshmallow
# 部署技术栈
Python3.7+venv+nginx+gunicorn+supervisord
复制代码
当然企业实际开发中还需要编写接口文档,用于各端同学的交互。我们可以使用postman
或者淘宝的API文档服务。
0x01 项目设计
技术选型做好之后,先不急于写代码,而是先把项目前期的设计做好,根据业务需求理清功能模块、数据库表结构、接口文档等。
我们的需求是做一个恋爱交友的应用,那么它主要功能模块就应该有
- 登录注册
这里使用用户手机号进行登录注册 - 用户列表
用户登录后,可以查看当前热门推荐的用户 - 联系人列表
联系过的用户,会出现在联系人列表中 - 聊天模块
给用户发送消息,消息类型包括文本、语音等 - 附近的人
根据用户登录的地理位置,查看附近的人 - 谁看过我
查看谁看过我,这个可以作为VIP
功能 - 个人信息
包括用户基本信息、用户相册和用户标签等 - VIP模块
当用户充值为VIP
后可以解锁一些功能,比如查看谁看过我的列表等
注意为了避免项目开发周期过长我们主要关注前台api
的开发,对于后台管理功能暂时不考虑。
根据这些功能模块,我们对项目中的实体进行抽象主要有
- 登录授权
user_auth
- 用户基本信息
user_info
- 用户位置
location
- 用户相册
user_album
- 用户标签
user_label
- 标签
label
- 联系人
contacts
- 消息
message
- 访问足迹
visitor
- 充值
VIP
的商品product
有月度VIP
、季度VIP
和年度VIP
三种 - 订单
user_order
- 用户
VIP
信息vip_info
这些实体在数据库建模中分别对应各自的表。避免代码篇幅太长,这里就不再贴出各表脚本代码。关于sql
表结构会在后面的项目地址中给出。
0x02 数据库
我这里使用的是腾讯云的数据库,当然使用本地的数据库也是可以的。
各表的字段如下图
注意这些表我都没有加外键约束。
0x03 项目框架搭建
我使用PyCharm
作为开发环境的IDE
,创建了一个名为DatingToday
项目,结构如下
(venv) ➜ DatingToday tree -L 1
.
├── app.py
├── datingtoday.sql
├── requirements.txt
├── static
├── templates
└── venv
复制代码
注意到我已经把数据库脚本文件放在项目根目录了。
venv
环境安装了以下依赖库
(venv) ➜ DatingToday pip list
Package Version
---------------------- -------
Click 7.0
Flask 1.1.1
flask-marshmallow 0.10.1
Flask-SQLAlchemy 2.4.0
itsdangerous 1.1.0
Jinja2 2.10.1
MarkupSafe 1.1.1
marshmallow 2.19.5
marshmallow-sqlalchemy 0.17.0
pip 10.0.1
setuptools 39.1.0
six 1.12.0
SQLAlchemy 1.3.6
Werkzeug 0.15.5
复制代码
可以使用命令
(venv) ➜ pip freeze > requirements.txt
复制代码
生成requirements.tx
文件。
使用命令
(venv) ➜ pip install -r requirements.txt
复制代码
还原虚拟环境中的依赖。
0x04 总结
本篇是基于Flask开发企业级API应用的第一篇,主要是对项目开发前期的准备工作,包括项目设计、数据库设计以及项目结构搭建,当然实际工作中可能还会先出API
文档,让前端的同学可以先动起来,但我这里因为已经是在写文档了,所以API
文档就省略了。磨刀不误砍柴工,这些工作都是必需的。
0x05 项目地址
github.com/hylinux1024…
0x06 学习资料
- palletsprojects.com/p/flask/
- realpython.com/flask-conne…
转载于:https://juejin.im/post/5d3bc3d25188254cbc32b1cc
基于Flask开发企业级REST API应用(一)相关推荐
- 基于Flask开发网站--利用复选框进行批量操作
由于近期有同事在工作中向我求助网页可视化怎么做,对于从来没有学过html/vue/javascript等框架开发的我来说,只能说我试试吧.所以针对他的诉求"通过复选框进行批量操作" ...
- Python Flask开发简单http api接口 示例
相比Django,使用python中的web框架Flask可以很方便的编写简单的接口,用于调用或调试. 通过pycharm新建一个Flask项目 运行项目之后,浏览器打开输入下列网址 更多实例 GET ...
- 基于 Quartz 开发企业级任务调度应用--转
Quartz 基本概念及原理 Quartz Scheduler 开源框架 Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现.该项目于 2009 ...
- 基于 Quartz 开发企业级任务调度应用
简介: Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现.作为一个优秀的开源调度框架,Quartz 具有功能强大,应用灵活,易于集成的特点.本 ...
- quartz (一) 基于 Quartz 开发企业级任务调度应用
本文转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-quartz/ Quartz 基本概念及原理 Quartz Scheduler 开 ...
- 基于quartz开发企业级任务调度应用
转载自:http://www.open-open.com/lib/view/open1368940960919.html 简介: Quartz 是 OpenSymphony 开源组织在任务调度领域的一 ...
- vue安装Postcss_Flask和Vue.js构建全栈单页面web应用【通过Flask开发RESTful API】
前言: 看了一些国外的关于介绍flask和vue的前后端分离的文章,但没看到比较通俗易懂,代码完善的,直到昨天看到一篇新出的文章,而且内容非常棒,所以翻译过来,供大家一起学习. 原文来自Develop ...
- 2021年基于VUE开发的一套移动端APP小说 听书AI男女多种 支持云端存储书籍记录
2021年基于VUE开发的一套移动端APP小说 前端架构主要采用: "axios": "^0.21.1", "better-scroll": ...
- 从零做网站开发:基于Flask和JQuery,实现表格管理平台
摘要:本文将为大家带来基于Flask框架和JQuery实现管理平台网站的开发功能. [写在前面] 你要开发网站? 嗯.. 会Flask吗? 什么东西,没听过... 会JQuery吗? 是python的 ...
最新文章
- excel行列互换_Excel如何实现行列数据互换?其实除了复制粘贴,还能这样操作...
- QT的QJSValue类的使用
- Response.Write()方法响应导致页面内容变形的问题
- visio任意区域填充斜线阴影_DX12渲染管线(6) - 级联阴影与距离场阴影
- 中国颜色(鼠标双击)
- 500万人“动口”收蚂蚁森林能量!天猫精灵发布语音“云种树”报告
- 自学python 编程基础科学计算及数据分析 pdf_自学Python:编程基础、科学计算及数据分析...
- Mysql学习总结(2)——Mysql超详细Window安装教程
- iPhone SDK开发基础之iPhone程序框架
- python窗口动态实时显示时间_量化交易实时动态监视系统(纯Python,只需要浏览器就能用)-直接GitHub开源可下载...
- 链表:从尾到头打印链表
- php工具apache启动失败,phpstudy中apache启动失败的原因是什么?
- bat获取管理员权限运行
- lua时间戳和日期转换
- IDEA 生成代码神器
- 常用汉字unicode编码
- EXCEL中如何将文本格式的数字转换为日期格式
- android AlarmManager详解,Alarm的设定和取消。
- 七巧板复原算法之四——边沿贴合和空腔查找
- Lycn 2013 with SQL AlwaysOn 「二」偷梁换柱装Lync
热门文章
- instant.page —— 一个 JS 脚本实现网站预加载,提升页面加载速度
- REVERSE-PRACTICE-BUUCTF-3
- Maven超详细配置
- 【CodeForces - 789C】Functions again(最大子段和变形,dp,思维)
- C++中两个常用的控制语句格式的函数(width和precision函数)
- java 轮询请求接口_js调用轮询接口
- 产生随机数java_java产生随机数的几种方式
- IO流读取文件用户信息根据年龄排序后,写到文件
- mysql linux环境安装_MySQL Linux环境的安装配置
- n位数的全排列(需要考虑大数的情况)