基於Flask開發企業級REST API應用(一)

關於我
編程界的一名小小程序猿,目前在一個創業團隊任team lead,技術棧涉及Android、Python、Java和Go,這個也是咱們團隊的主要技術棧。
Github:github.com/hylinux1024
微信公衆號:angrycode前端

前面對Python WEB框架Flask的源碼進行走讀,對服務的啓動流程路由原理模板渲染有了一個宏觀的認識。不過說了那麼多理論,接下來就利用Flask開發一個企業級的API應用。python

我選用團隊最近開發的一個企業應用做爲案例。這是一個戀愛交友應用,原本是使用JavaSpringBoot框架進行開發的,不過爲了不沒必要要的麻煩,我會使用Flask進行改造,固然這個案例我還會精簡一下,保持核心業務的同時,重點關注其中涉及到的技術和工具庫的使用,最大限度的還原項目開發的完整流程。linux

0x00 技術棧

這裏咱們使用Python版本爲3.7,WEB框架固然就是Flask,數據庫使用MySqlORM使用SqlAlchemy,使用Redis做爲緩存,可能還會使用到序列化工具庫marshmallownginx

開發環境使用venv,部署服務環境會使用nginx+gunicorn+supervisordgit

所以整個技術棧爲github

# 開發技術棧
Python3.7+venv+Flask+MySql+SqlAlchemy+Redis+marshmallow
# 部署技術棧
Python3.7+venv+nginx+gunicorn+supervisord
複製代碼

固然企業實際開發中還須要編寫接口文檔,用於各端同窗的交互。咱們能夠使用postman或者淘寶的API文檔服務sql

0x01 項目設計

技術選型作好以後,先不急於寫代碼,而是先把項目前期的設計作好,根據業務需求理清功能模塊、數據庫表結構、接口文檔等。數據庫

咱們的需求是作一個戀愛交友的應用,那麼它主要功能模塊就應該有編程

  • 登陸註冊
    這裏使用用戶手機號進行登陸註冊
  • 用戶列表
    用戶登陸後,能夠查看當前熱門推薦的用戶
  • 聯繫人列表
    聯繫過的用戶,會出如今聯繫人列表中
  • 聊天模塊
    給用戶發送消息,消息類型包括文本、語音等
  • 附近的人
    根據用戶登陸的地理位置,查看附近的人
  • 誰看過我
    查看誰看過我,這個能夠做爲VIP功能
  • 我的信息
    包括用戶基本信息、用戶相冊和用戶標籤等
  • VIP模塊
    當用戶充值爲VIP後能夠解鎖一些功能,好比查看誰看過個人列表

注意爲了不項目開發週期過長咱們主要關注前臺api的開發,對於後臺管理功能暫時不考慮。flask

根據這些功能模塊,咱們對項目中的實體進行抽象主要有

  • 登陸受權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 學習資料

相關文章
相關標籤/搜索