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

關于我
編程界的一名小小程序猿,目前在一個創業團隊任team lead,技術棧涉及Android、Python、Java和Go,這個也是我們團隊的主要技術棧。
Github:github.com/hylinux1024
微信公眾號: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或者淘寶的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…

轉載于:https://juejin.im/post/5d3bc3d25188254cbc32b1cc

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448114.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448114.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448114.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決:Do not use built-in or reserved HTML elements as component id: form

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. vue 新寫了個組件,運行工程成功,但界面沒有出效果,F12 提示有一個警告: Do not use …

移動語義,右值引用

移動語義 目錄 右值引用變量是左值move庫函數移動構造函數和移動賦值移動操作庫容器和異常移動賦值操作符移動后的對象必須是可以析構的合成移動操作右值移動左值拷貝右值在無法被移動時進行拷貝拷貝和交換賦值操作與移動移動迭代器右值引用和成員函數右值與左值引用的成員函…

集合練習:登錄注冊功能

需求: 1、登錄賬號唯一,在注冊時驗證輸入的賬號是否可用,若已存在,則不可用,若不存在則可用2、登錄時使用賬號密碼進行驗證1 /**2 * author Administrator3 * 登錄信息 4 */5 public class UserLogin {6 …

vue 通信、傳值的多種方式(超詳細)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、通過路由帶參數進行傳值 ①兩個組件 A和B,A組件通過query把orderId傳遞給B組件(觸發事件可以是點擊事件、鉤子函數等&am…

新手開車 駕駛小秘訣要牢記

有很多人剛買到新車興奮異常,憑著并不熟練的駕駛技術,過了幾天的車癮后發現,剛買的車怎么出現了這樣那樣的問題 有很多人剛買到新車興奮異常,憑著并不熟練的駕駛技術,過了幾天的車癮后發現,剛買的車怎么出現…

chrome中Google插件導出導入

導出插件: 一般電腦默認將你安裝的插件存放的位置在:C:\Users(用戶)\你的電腦名稱\AppData\Local\Google\Chrome\User Data\Default\Extensions 這個文件夾下。這里的 AppData 是個隱藏文件夾,需要顯示隱藏文件夾才行…

科目三電子路考操作流程

如果你已經通過科目二場內五項考試,正準備參加科目三電子路考的話,不妨看看由邕江駕校李師傅操作講解的電子路考考試流程演示視頻,每項都有詳細介紹操作要領及評判標準哦。 科目三考試項目:上車準備、起步、路口左轉彎、通過學校區…

vue Bus 總線 組件間通信

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 有時候兩個組件也需要通信(非父子關系)。當然Vue2.0提供了Vuex,但在簡單的場景下,可以使…

C++沒有調用析構函數

github地址 在項目中遇到一個問題,析構函數沒有調用產生了內存泄露。 具體見valgrind檢測libevent內存泄露 我們看兩個例子 demo1 class Test1; void del(Test1* obj){delete obj; } class Test1{ public:Test1(){printf("Test1\r\n");}~Test1(){pri…

實際操作之路考的這些事

辛苦了這么久練習路考,今天終于實際操作到我路考了。上車以后。關上車門。把考試的單地上給考官。還沒有認真的去看考官一眼。于是就聽到考官用低沉的聲音對我說:你好!當時就感覺有一點意外。沒想到考官你這么有禮貌。然后我就沒那么緊張了&a…

[C# 網絡編程系列]專題十二:實現一個簡單的FTP服務器

引言: 休息一個國慶節后好久沒有更新文章了,主要是剛開始休息完心態還沒有調整過來的, 現在差不多進入狀態了, 所以繼續和大家分享下網絡編程的知識,在本專題中將和大家分享如何自己實現一個簡單的FTP服務器。在我們平…

vue 2 使用 Bus.js 實現兄弟 (非父子) 組件通信 簡單案例

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 vue2中廢棄了$dispatch和$broadcast廣播和分發事件的方法。父子組件中可以用props和$emit()。如何實現非父子組件間的通信,可…

jenkins自動化部署

jenkins自動化部署 github地址 首先設置源碼地址,jenkins會從倉庫中拉取最新代碼 拉取代碼后運行shell腳本自動進行編譯 cd mediaService cmake -S . -B cmake-build-release-hisi3531 -DCMAKE_C_COMPILER/opt/hisi-linux/x86-arm/arm-hisiv500-linux/target/bin…

JS-[IIFE閉包]

JS-IIFE&閉包 IIFE(立即調用函數表達式)示例IIFE實現單例模式閉包計數器例子非閉包實現閉包實現IIFE閉包實現內存泄露解決IIFE(立即調用函數表達式) 示例 (function iife(){ //直接執行,無需調用console.log("hello"); })(); //上面相當于function ii…

學開車不能急于求成,心急上路

我發現很多人開始學開車以后就急著要上路,覺得開車是很簡單的事情,個人覺得開車雖然不難(相對于會開車的人來說),但是,雖然不是很難,也不是一學會開車起步就能上路去瀟灑的。急于求成的人很容易…

vue 組件間傳值、兄弟組件 、bus方式 ( 1 分鐘看懂 )

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 bus方式的組件間傳值其實就是建立一個公共的js文件,專門用來傳遞消息 1.建立公共文件,并引入 新建msgBus.js文件…

valgrind檢測libevent內存泄露

valgrind檢測libevent內存泄露 github地址 在使用封裝好的http庫時,遇到了如下的內存泄露,一開始在definitely處還存在泄露,這里就不貼圖了,已經被淹沒了。 根據提示定位出錯代碼位置,如下圖: 這里提示ev…

往對象數組里面添加相同的key 不同的value

應用場景&#xff1a;后盾字段沒有發給你 自己補充數據 <div v-for"item in list" :key"item.id"><p>{{ item.id}} ----> {{ item.name}} --->{{ item.sex }}---> {{ item.tel }}---->{{ item.link}}--插入數據</p></di…

vue 子組件 調用、觸發父組件中的方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我發現了兩種寫法。 方法一&#xff1a; 子組件&#xff1a; <template><button click"submit">提交</but…

新手必看一位老司機的十年開車經驗

今天&#xff0c;小編為大家收集整理了一個老司機的十年開車經驗&#xff0c;新手們一定要學哦&#xff0c;因為這種寶貴的開車經驗是我們以后開車過程中每天都要用到的常識。將來無論在什么時候&#xff0c;這種寶貴經驗都會給我們帶來更安全的行車時光。新手必看的十年開車經…