博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于Flask开发企业级REST API应用(一)
阅读量:4640 次
发布时间:2019-06-09

本文共 2431 字,大约阅读时间需要 8 分钟。

关于我

编程界的一名小小程序猿,目前在一个创业团队任team lead,技术栈涉及Android、Python、Java和Go,这个也是我们团队的主要技术栈。
Github:
微信公众号: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或者淘宝的。

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 listPackage                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 项目地址

0x06 学习资料

转载于:https://juejin.im/post/5d3bc3d25188254cbc32b1cc

你可能感兴趣的文章
cocos2d-x 3.10 PageView BUG
查看>>
装饰器的基本使用:用户登录
查看>>
CSS选择器总结
查看>>
mysql中sql语句
查看>>
head/tail实现
查看>>
sql语句的各种模糊查询语句
查看>>
vlc 学习网
查看>>
Python20-Day05
查看>>
Real World Haskell 第七章 I/O
查看>>
C#操作OFFICE一(EXCEL)
查看>>
【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
查看>>
ABAP 程序间的调用
查看>>
移动端单屏解决方案
查看>>
web渗透测试基本步骤
查看>>
使用Struts2标签遍历集合
查看>>
angular.isUndefined()
查看>>
第一次软件工程作业(改进版)
查看>>
网络流24题-飞行员配对方案问题
查看>>
Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用
查看>>
引入css的四种方式
查看>>