前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Flask开发企业级REST API应用(一)

基于Flask开发企业级REST API应用(一)

作者头像
阳仔
发布2019-07-30 15:27:29
9950
发布2019-07-30 15:27:29
举报
文章被收录于专栏:终身开发者终身开发者

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

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

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

0x00 技术栈

这里我们使用 Python版本为3.7, WEB框架当然就是 Flask,数据库使用 MySqlORM使用 SqlAlchemy,使用 Redis作为缓存,可能还会使用到序列化工具库 marshmallow

开发环境使用 venv,部署服务环境会使用 nginx+gunicorn+supervisord

因此整个技术栈为

代码语言:javascript
复制
# 开发技术栈
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项目,结构如下

代码语言:javascript
复制
(venv) ➜  DatingToday tree -L 1
.
├── app.py
├── datingtoday.sql
├── requirements.txt
├── static
├── templates
└── venv

注意到我已经把数据库脚本文件放在项目根目录了。 venv环境安装了以下依赖库

代码语言:javascript
复制
(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

可以使用命令

代码语言:javascript
复制
(venv) ➜ pip freeze > requirements.txt

生成 requirements.tx文件。

使用命令

代码语言:javascript
复制
(venv) ➜ pip install -r requirements.txt

还原虚拟环境中的依赖。

0x04 总结

本篇是基于Flask开发企业级API应用的第一篇,主要是对项目开发前期的准备工作,包括项目设计、数据库设计以及项目结构搭建,当然实际工作中可能还会先出 API文档,让前端的同学可以先动起来,但我这里因为已经是在写文档了,所以 API文档就省略了。磨刀不误砍柴工,这些工作都是必需的。

0x05 项目地址

https://github.com/hylinux1024/datingtoday

0x06 学习资料
  • https://palletsprojects.com/p/flask/
  • https://realpython.com/flask-connexion-rest-api-part-2/
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 终身开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 技术栈
  • 0x01 项目设计
  • 0x02 数据库
  • 0x03 项目框架搭建
  • 0x04 总结
  • 0x05 项目地址
  • 0x06 学习资料
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档