關於我
編程界的一名小小程序猿,目前在一個創業團隊任team lead,技術棧涉及Android、Python、Java和Go,這個也是咱們團隊的主要技術棧。
Github:github.com/hylinux1024
微信公衆號:angrycode前端
前面對Python WEB
框架Flask
的源碼進行走讀,對服務的啓動流程、路由原理和模板渲染有了一個宏觀的認識。不過說了那麼多理論,接下來就利用Flask
開發一個企業級的API
應用。python
我選用團隊最近開發的一個企業應用做爲案例。這是一個戀愛交友應用,原本是使用Java
的SpringBoot
框架進行開發的,不過爲了不沒必要要的麻煩,我會使用Flask
進行改造,固然這個案例我還會精簡一下,保持核心業務的同時,重點關注其中涉及到的技術和工具庫的使用,最大限度的還原項目開發的完整流程。linux
這裏咱們使用Python
版本爲3.7,WEB
框架固然就是Flask
,數據庫使用MySql
,ORM
使用SqlAlchemy
,使用Redis
做爲緩存,可能還會使用到序列化工具庫marshmallow
。nginx
開發環境使用venv
,部署服務環境會使用nginx+gunicorn+supervisord
git
所以整個技術棧爲github
# 開發技術棧
Python3.7+venv+Flask+MySql+SqlAlchemy+Redis+marshmallow
# 部署技術棧
Python3.7+venv+nginx+gunicorn+supervisord
複製代碼
固然企業實際開發中還須要編寫接口文檔,用於各端同窗的交互。咱們能夠使用postman
或者淘寶的API文檔服務。sql
技術選型作好以後,先不急於寫代碼,而是先把項目前期的設計作好,根據業務需求理清功能模塊、數據庫表結構、接口文檔等。數據庫
咱們的需求是作一個戀愛交友的應用,那麼它主要功能模塊就應該有編程
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
表結構會在後面的項目地址中給出。
我這裏使用的是騰訊雲的數據庫,固然使用本地的數據庫也是能夠的。
各表的字段以下圖
注意這些表我都沒有加外鍵約束。
我使用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
複製代碼
還原虛擬環境中的依賴。
本篇是基於Flask開發企業級API應用的第一篇,主要是對項目開發前期的準備工做,包括項目設計、數據庫設計以及項目結構搭建,固然實際工做中可能還會先出API
文檔,讓前端的同窗能夠先動起來,但我這裏由於已是在寫文檔了,因此API
文檔就省略了。磨刀不誤砍柴工,這些工做都是必需的。