項目源代碼下載
其實本項目的需求分析乍一看比較復雜,但是細細拆分出來實際實現還是比較容易的。基本用上前面所學的所有知識點。
1.額度 15000或自定義
2.實現購物商場,買東西加入購物車,調用信用卡接口轉賬
3.可以提現,手續費5%
4.支持多賬戶登錄
5.支持賬戶間轉賬
6.記錄每日消費流水
7.提供還款接口
8.ATM記錄操作日志
9.提供管理接口,包括添加賬戶,用戶額度,凍結賬戶等...
10.用戶認證使用裝飾器
關於本項目源代碼已上傳到Github
,感興趣的朋友可點擊此處 點我啊帥哥! 進行下載。
如果下載過程中出現異常,如下圖,
項目架構設計圖
下載完之后請打開:README.md
查看說明文檔,其中羅列了一些比較重要的知識點。
項目目錄功能一覽
這里列舉一下該項目目錄功能:
知識回顧與亮點解析
登錄-注冊 一體化
在db_handler.py
中,有一段代碼我認為比較不錯。
這段代碼在注冊以及登錄時都會用到,那么我當時在寫注冊功能時是有些不太能理解的。為什么要判斷一個存儲用戶數據的json
文件是否存在后還要打開它並返回其中的用戶字典呢?直接判斷文件是否存在不就好了嗎?覺得有些不能理解,但是我后來發現基本上需求中的每一個實現函數都是調用了該方法並且直接在user_dic
中拿到了數據,此時我才恍然大悟。
裝飾器中的import
這段代碼是在common.py
中:
其實我對模塊這一章印象還是比較深刻的,但是確實沒有意識到循環導入的問題,以致於這里我也是看了好一會才看明白,首先 src.py
中導入過一次 common.py
,如果將 common.py
中的 from core import src
放在函數體外就會產生循環導入的問題,這一點應該是我在這個項目中學習到最重要的一點了。
src.py
中的import
common.py
中的import
枚舉的使用
這個點在src.py
中購物商場函數中:
說來慚愧,枚舉之前有學過,但是這玩意兒確實不太常用,基本上一次沒用過,所以已經忘得差不多了。所以這邊記錄一下,其實在Python的for
循環中只要數據結構特殊,是可以容納兩個迭代變量的。如:
item = [(1,"第一個"),(2,"第二個"),(3,"第三個")] # 這種結構可以直接被dict()所消化 item_dic = dict(item) print(item_dic) # {1: '第一個', 2: '第二個', 3: '第三個'} print(list(item_dic.items())) # [(1, '第一個'), (2, '第二個'), (3, '第三個')] for k,v in item: print(k,v) """ 1 第一個 2 第二個 3 第三個 """ li = [i for i in item_dic.values()] li_enu = list(enumerate(li)) print(li_enu) # [(0, '第一個'), (1, '第二個'), (2, '第三個')] 第一個是索引,第二個是元素本身 for index,ele in li_enu: print(index,ele) """ 0 第一個 1 第二個 2 第三個 """
json字符串數據類型
這一點的疑惑完全怪自己json
沒學明白,可以看到下圖在注冊時直接存入的是int
類型。然后json
后保存到了本地文件中。
在其他需要用到金額的功能時我產生了疑惑,因為我認為json
存儲的拿出來是字符串需要進行一次 int()
轉換,所以這里看見並沒有做int
轉換而是直接進行加減。當時我就蒙了...
所以,我進行了一個小測試,這點估計很多人都知道或者會忽略,但是!我不知道!!所以寫下來釘在恥辱柱上,請盡情嘲諷吧!!!:
import json data = 1 json_data = json.dumps(data) print(type(json_data)) # <class 'str'> print(type(json.loads(json_data))) # <class 'int'> # 可以看到json拿出來的直接就是int類型,不必再做轉換
寫在最后
這一個項目我之前確實沒有手寫過完整的,不管是抄也好自己寫也好都沒有。所以最近拿出來抄了抄發現還是有一些能讓自己提升的空間的,比如枚舉!!!真的是八百年難用一次啊。所以告誡各位同學,永遠不要自大,很多細小的點真的很容易被人忽略,輕則難看(就算我用int()
轉換一次json
格式實際上也沒什么影響,但是我確實是強迫症,不容忍自己犯這種錯誤),重則異常。