聊聊屬性方法property的用法

 寫以前隨便百度了一下博客,又看到廖雪峯的博客了。果真置頂的能力很強。前端

我想說其實property的用法並非主要用來作類型檢查。反而更多應該是用於簡化操做的目的。python

 

寫以前想聊一個古老的話題。年初的時候剛接觸flask。當時用SQLAlchemy的Model模型去構建了一張表。在剛入門的時候,以爲僅僅是不用寫SQL這麼一回事數據庫

如今看來,其實SQLAlchemy的用法隱含的思想是將一個表抽象爲一個對象,或者一個實體。對於實體的內容進行解讀。數據庫只是做爲存放內容的工具而已。json

 

初學的時候,後端要返回數據給前端。按照上面的認知,先用dbname.query.all()查出表中的全部數據。flask

而後就開始傻傻的寫for循環。好比查出來的數據要轉成字典。會在循環前定義一個空字典。每次循環用i計數器的值做爲字典鍵值啊這種傻傻的用法。後端

不過無論怎麼說,從功能上面來看,仍是完整完成了要求。不得不說是一份不精緻的答案。甚至當初由於這種思想,一直搞不清楚json值的正確用法。那是由於本身去實現了從數據到json的轉換。因此不優雅,不高效。api

 

混着混着,時間就過去了這麼幾個月。有些事情就是在沒有思考的狀況下忽然想明白的。不知道是我的風格或是其餘。總之如今在用這個的時候就很明確爲何要這麼幹而不是選擇其餘方法。restful

可能更加理解python的目的性了吧:簡潔勝於高效dom

 

高不高效的事情我還沒到能夠討論的階段。上次看dict類型的實現就明白了。並無那麼多能夠研習人家造出來輪子的原理的時間。先用,哪天天然就懂了工具

 

接下來簡單寫一下代碼。

基礎代碼是這樣:

 

 1 # SQLAlchemy Model
 2 class Tools(db.Model):
 3     id = db.Column(db.String(100), primary_key=True)
 4     toolname = db.Column(db.String(100))
 5     tooldir = db.Column(db.String(100))
 6     toolurl = db.Column(db.String(100))
 7     tooltext = db.Column(db.String(100))
 8 
 9 
10 # Tool.json(demo)
11 [
12     {"toolId":1,"toolName":"工具1","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具說明"},
13     {"toolId":2,"toolName":"工具2","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具說明"},
14     {"toolId":3,"toolName":"工具3","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具說明"},
15     {"toolId":4,"toolName":"工具4","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具說明"},
16     {"toolId":5,"toolName":"工具5","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具說明"},
17     {"toolId":6,"toolName":"工具6","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具說明"}
18 ]
19 
20 
21 # Flask route restful api
22 @ns.route('/store')
23 class Store(Resource):
24     def get(self):
25         tools = Tools.query.all()
26         # do something to change variable name then return
27         return jsonify(tools)

 

簡單介紹一下上面代碼的內容。

1-7行:表的模型類

11-18行:前端給出的json文件(接口字段)

21-27行:後端接口實現(註釋部分表明省略了數據處理的代碼)

因爲後端接口本身去寫一個轉換的代碼,按照之前那種寫法會很長。不貼出來了。本身去優化一個更無聊。(碼代碼久了,更喜歡偷懶了)

 

因此接下來貼使用property來實現的接口處理

 1 # SQLAlchemy Model
 2 class Tools(db.Model):
 3     id = db.Column(db.String(100), primary_key=True)
 4     toolname = db.Column(db.String(100))
 5     tooldir = db.Column(db.String(100))
 6     toolurl = db.Column(db.String(100))
 7     tooltext = db.Column(db.String(100))
 8 
 9     @property
10     def serialize(self):
11         series = {
12             'toolId': self.id,
13             'toolName': self.toolname,
14             'tooldir': self.tooldir,
15             'toolUrl': self.toolurl,
16             'toolText': self.tooltext
17         }
18         return series
19 
20 
21 # Tool.json(demo)
22 [
23     {"toolId":1,"toolName":"工具1","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具說明"},
24     {"toolId":2,"toolName":"工具2","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具說明"},
25     {"toolId":3,"toolName":"工具3","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具說明"},
26     {"toolId":4,"toolName":"工具4","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具說明"},
27     {"toolId":5,"toolName":"工具5","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具說明"},
28     {"toolId":6,"toolName":"工具6","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具說明"}
29 ]
30 
31 
32 # Flask route restful api
33 @ns.route('/store')
34 class Store(Resource):
35     def get(self):
36         return jsonify([i.serialize for i in Tools.query.all()])

 

感受清晰明瞭不少。

順便在實現這個的過程當中,也算清楚了python自帶的json包的方法和flask的jsonify方法的區別是什麼。

不得不說,jsonify真是偷懶的好方法。

 

ps:吐槽一下這狗屎代碼插入器。顯示在博客當中的時候會由於dom結構寬度不夠直接把代碼撐到行號中間去。wtf。只能刪減掉一些內容了

相關文章
相關標籤/搜索