關于我
編程界的一名小小程序猿,目前在一個創業團隊任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…