关于我
编程界的一名小小程序猿,目前在一个创业团队任team lead,技术栈涉及Android、Python、Java和Go,这个也是我们团队的主要技术栈。
Github:github.com/hylinux1024
微信公众号:angrycode

前面对Python WEB框架Flask的源码进行走读,对服务的启动流程、路由原理和模板渲染有了一个宏观的认识。不过说了那么多理论,接下来就利用Flask开发一个企业级的API应用。

我选用团队最近开发的一个企业应用作为案例。这是一个恋爱交友应用,本来是使用JavaSpringBoot框架进行开发的,不过为了避免不必要的麻烦,我会使用Flask进行改造,当然这个案例我还会精简一下,保持核心业务的同时,重点关注其中涉及到的技术和工具库的使用,最大限度的还原项目开发的完整流程。

0x00 技术栈

这里我们使用Python版本为3.7,WEB框架当然就是Flask,数据库使用MySqlORM使用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应用(一)相关推荐

  1. 基于Flask开发网站--利用复选框进行批量操作

    由于近期有同事在工作中向我求助网页可视化怎么做,对于从来没有学过html/vue/javascript等框架开发的我来说,只能说我试试吧.所以针对他的诉求"通过复选框进行批量操作" ...

  2. Python Flask开发简单http api接口 示例

    相比Django,使用python中的web框架Flask可以很方便的编写简单的接口,用于调用或调试. 通过pycharm新建一个Flask项目 运行项目之后,浏览器打开输入下列网址 更多实例 GET ...

  3. 基于 Quartz 开发企业级任务调度应用--转

    Quartz 基本概念及原理 Quartz Scheduler 开源框架 Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现.该项目于 2009 ...

  4. 基于 Quartz 开发企业级任务调度应用

    简介: Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现.作为一个优秀的开源调度框架,Quartz 具有功能强大,应用灵活,易于集成的特点.本 ...

  5. quartz (一) 基于 Quartz 开发企业级任务调度应用

    本文转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-quartz/ Quartz 基本概念及原理 Quartz Scheduler 开 ...

  6. 基于quartz开发企业级任务调度应用

    转载自:http://www.open-open.com/lib/view/open1368940960919.html 简介: Quartz 是 OpenSymphony 开源组织在任务调度领域的一 ...

  7. vue安装Postcss_Flask和Vue.js构建全栈单页面web应用【通过Flask开发RESTful API】

    前言: 看了一些国外的关于介绍flask和vue的前后端分离的文章,但没看到比较通俗易懂,代码完善的,直到昨天看到一篇新出的文章,而且内容非常棒,所以翻译过来,供大家一起学习. 原文来自Develop ...

  8. 2021年基于VUE开发的一套移动端APP小说 听书AI男女多种 支持云端存储书籍记录

    2021年基于VUE开发的一套移动端APP小说 前端架构主要采用: "axios": "^0.21.1", "better-scroll": ...

  9. 从零做网站开发:基于Flask和JQuery,实现表格管理平台

    摘要:本文将为大家带来基于Flask框架和JQuery实现管理平台网站的开发功能. [写在前面] 你要开发网站? 嗯.. 会Flask吗? 什么东西,没听过... 会JQuery吗? 是python的 ...

最新文章

  1. excel行列互换_Excel如何实现行列数据互换?其实除了复制粘贴,还能这样操作...
  2. QT的QJSValue类的使用
  3. Response.Write()方法响应导致页面内容变形的问题
  4. visio任意区域填充斜线阴影_DX12渲染管线(6) - 级联阴影与距离场阴影
  5. 中国颜色(鼠标双击)
  6. 500万人“动口”收蚂蚁森林能量!天猫精灵发布语音“云种树”报告
  7. 自学python 编程基础科学计算及数据分析 pdf_自学Python:编程基础、科学计算及数据分析...
  8. Mysql学习总结(2)——Mysql超详细Window安装教程
  9. iPhone SDK开发基础之iPhone程序框架
  10. python窗口动态实时显示时间_量化交易实时动态监视系统(纯Python,只需要浏览器就能用)-直接GitHub开源可下载...
  11. 链表:从尾到头打印链表
  12. php工具apache启动失败,phpstudy中apache启动失败的原因是什么?
  13. bat获取管理员权限运行
  14. lua时间戳和日期转换
  15. IDEA 生成代码神器
  16. 常用汉字unicode编码
  17. EXCEL中如何将文本格式的数字转换为日期格式
  18. android AlarmManager详解,Alarm的设定和取消。
  19. 七巧板复原算法之四——边沿贴合和空腔查找
  20. Lycn 2013 with SQL AlwaysOn 「二」偷梁换柱装Lync

热门文章

  1. instant.page —— 一个 JS 脚本实现网站预加载,提升页面加载速度
  2. REVERSE-PRACTICE-BUUCTF-3
  3. Maven超详细配置
  4. 【CodeForces - 789C】Functions again(最大子段和变形,dp,思维)
  5. C++中两个常用的控制语句格式的函数(width和precision函数)
  6. java 轮询请求接口_js调用轮询接口
  7. 产生随机数java_java产生随机数的几种方式
  8. IO流读取文件用户信息根据年龄排序后,写到文件
  9. mysql linux环境安装_MySQL Linux环境的安装配置
  10. n位数的全排列(需要考虑大数的情况)