我的第一個python web開發框架(8)——項目結構與RESTful介面風格說明

来源:http://www.cnblogs.com/EmptyFS/archive/2017/10/18/7598928.html
-Advertisement-
Play Games

PS:再次說明一下,原本不想寫的太啰嗦的,可之前那個系列發佈後發現,好多朋友都想馬上拿到代碼立即能上手開發自己的項目,對代碼結構、基礎常識、分類目錄與文件功能結構、常用函數......等等什麼都不懂,然後就想使用,我真的很無語,還有一些朋友有十幾年開發經驗也會問一些很基礎的問題,我都不知道怎麼回答了 ...


  PS:再次說明一下,原本不想寫的太啰嗦的,可之前那個系列發佈後發現,好多朋友都想馬上拿到代碼立即能上手開發自己的項目,對代碼結構、基礎常識、分類目錄與文件功能結構、常用函數......等等什麼都不懂,然後就想使用,我真的很無語,還有一些朋友有十幾年開發經驗也會問一些很基礎的問題,我都不知道怎麼回答了。一下子拿到整個項目的代碼,初學者要上手並不是那麼容易的事情,很多代碼經過層層封裝後,反覆跳轉調用,不弄暈就很不容易了,所以得一步步來,瞭解整個代碼的發展歷程,知道它是怎麼變化的,瞭解常用代碼函數的使用方法,這樣才能快速上手,游刃有餘。

 

  過了兩天,小白與老菜在公司加完班後,小白看到老菜準備走人,趕緊逮著機會走了過去。

  小白:老大有空嗎?想和您再聊一會,請教幾個問題?

  老菜:哈哈...有什麼問題說來聽聽。

  小白:按您上次說的準備工作基本都準備好了,包括開發環境、前端頁面、資料庫設計等,現在就要進入編碼階段了,上次講的文件分類擺放什麼的不太明白,為什麼要這麼做?還有就是我沒有積累過各種常用工具函數,能否發幾個給我?

  老菜:工具函數回頭髮給你,對於文件分類擺放我再細說一下。

  我與很多開發人員合作過,由於不少程式員對項目文件的分類管理不太重視,所以開發一段時間以後,就會發現整個項目變得很亂很難管理,大家根據自己的喜好隨便創建目錄,而各個程式文件也沒有分類放到對應的文件夾里,另外由於大家沒有查看別人代碼的習慣且文件管理混亂,同樣的功能經常會自己寫自己的,造成重覆開發。時間久了以後需要對項目進行維護時,就是各種找,項目小問題還不大,項目大時程式文件比較多要修改一個bug都很麻煩。所以在開發前,大家需要先約定好項目結構說明,這樣大家在開發時都會分門別類的在對應分類文件夾里創建程式文件,且程式文件命名都使用統一的規範,可讀性強,大家理解起來也容易。

  比如說我常用的項目結構:(如下圖)

  

api  介面api文件夾
common  工具函數文件夾
config  配置文件夾
external_interface  外部介面調用文件夾       
log  日誌文件夾
logic  邏輯層文件夾
service  python服務
static  靜態文件夾
test  測試文件夾
main.py 程式主文件










 

 

 

 

  有了約束後,相關開發人員清楚各個目錄功能,就很容易找到自己想要的代碼或函數,同時也知道要添加的文件或函數往哪裡加。

  比如說管理員管理表(manager),我們一般介面文件名會用這個表名來命名:manager.py,針對這個表進行的查詢、添加記錄、修改記錄、刪除記錄和其他操作,這些功能函數都會放在manager.py中,方便出現異常時定位查找。

  工具函數文件必須使用功能名稱的英文名來命名,一般我還會加上尾碼_helper來進行區分,讓大家一看到這個文件就知道他是common里的工具函數文件,比如:datetime_helper.py(日期操作包)、db_helper.py(資料庫操作包)、log_helper.py(日誌操作包)等。邏輯層文件名,我會添加尾碼_logic,python服務文件會添加尾碼_service,測試類文件會添加尾碼_test來區分文件功能。當然不添加尾碼或用其他約定好的首碼或尾碼名都可以,只要大家遵循統一的約束,開發起來就會輕鬆多了。

 

  另外,由於python的url路由和.net、php的不一樣,不是用文件名來做為訪問路由的,而是在文件中自定義的,所以在命名上也是要遵循一定的約束,這樣管理起來才比較容易。現在比較流行RESTful風格的介面(路由),你可以嘗試一下用這個小項目練練手,熟悉一下。

  關於RESTful的說明網上有太多文章了,這裡就不再細說它的定義。那麼使用它有什麼好處呢?我個人覺得使用這種url設計風格,最大的好處就是我們不用再為url起名而苦惱了(哈哈...說笑的...),RESTful風格設計的url結構清晰,讓人容易理解每個url的作用,擴展起來也方便。

  那麼我們來說說怎麼用它來設計url。首先url名稱上儘量使用名詞,不要用動詞,比如對管理員表進行操作,url設計不要用add_manager、edit_manager等方式;對資源的操作,我們使用HTTP協議里的動詞來實現。

  GET:獲取資源

  POST:創建資源

  PUT:更新資源

  DELETE:刪除資源

  例如:

  獲取管理員列表:GET http://127.0.0.1/manager/?page=0&rows=20&sidx=id&sord=desc

  添加管理員:POST http://127.0.0.1/manager/

  修改id為1的管理員記錄信息:PUT http://127.0.0.1/manager/1/

  獲取id為1的管理員記錄信息:GET http://127.0.0.1/manager/1/

  刪除id為1的管理員記錄:DELETE http://127.0.0.1/manager/1/

  啟用或禁用id為1的管理員記錄:PUT http://127.0.0.1/manager/1/enable/ (啟用)   PUT http://127.0.0.1/manager/1/disable/ (禁用)

  當然,為了讓url更清晰,有時還會添加一些分類類別(也有可能是多級分類),比如前後端介面區分,會在manager前增加manage或admin,例如:GET http://127.0.0.1/manage/manager/(獲取後臺管理系統的管理員列表)

  好了,你自己上網去查查相關資料,如果不會的話參考我給你的demo,照著複製粘貼就可以了,只有動手做多了,坑踩多了就理解了。趕快去嘗試一下吧,只有使用過你才能真正理解它的用法與好處。

 

 

作者:AllEmpty
出處:http://www.cnblogs.com/EmptyFS/
有興趣的朋友可以加加python開發QQ群:669058475,大家一起探討。大家有問題的話可以在群里發問,當然我平時工作也非常繁忙不一定會及時回覆。

本文為AllEmpty原創,歡迎轉載,但未經同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對AutoMapper.Mapper.CreateMap使用不當,導致併發情況下出現異常System.NullReferenceException、System.InvalidOperationException ...
  • 上一章節中對路由的註冊和匹配過程進行了介紹,知道了MVC的Http請求最終是交由MvcHandler處理的,而其處理過程就是對Controller的創建、執行和釋放。 本章將從以下幾點進一步對上面提到的三個過程進行介紹: ● MvcHandler概述 ● ControllerBuilder&Cont ...
  • ASP.NET MVC的路由是MVC應用的一個核心也是MVC應用處理的入口,作為一個開發者,在正常情況下僅僅需要做的就是根據需求去定義實體、業務邏輯,然後在MVC的Controller中去調用、View中去展現,“路由”僅僅是定義一個路由表,使用戶在點擊一個鏈接時,應用能夠命中正確的Controll ...
  • 反射是程式猿的好幫手,有了反射你可以少寫一半的代碼。下麵是一些常用的反射擴展方法。 如有高見,歡迎交流與分享:) ...
  • 之前的文章中介紹了My Blog文章維護功能的開發,開發過程中使用Area的方法建立了用於維護文章的Controller、View和Model。但是無論代碼怎麼變對於瀏覽器來說都是通過一個url地址去訪問,現在My Blog可用的url有以下幾個: http://localhost:52356/ - ...
  • 本文以近乎v5.2產品為例截圖介紹,近乎產品是基於asp.net mvc 5.0框架。大家可以下一個近乎源碼版,來進一步熟悉和瞭解學習。 近乎下載地址:http://www.jinhusns.com/ MVC項目一啟動會首先進入到Global執行Application_Start()這個方法註冊 區 ...
  • 昨日去筆試了,遇到了一道編程題,因為經常坐在電腦前面,使用開發工具已經習慣了“alt+/”,導致了平時有些方法不是很註意看,於是在整理了思路之後,寫方法的時候,完蛋了,卡殼了....導致那道題做得不是盡如人意....現在筆者將之整理出來,希望加深自己的印象的同時也能夠對讀者有所幫助。 題目:從鍵盤中 ...
  • int #數值(整數) str #字元串(文字) float #浮點(小數點) list #列表 print() #列印\輸出 len() #長度 max() #最大值 min() #最小值 del() #刪除元素 list.append(obj) #此語法中list代表列表,obj代表需要添加到l ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...