写之前随便百度了一下博客,又看到廖雪峰的博客了。果然置顶的能力很强。

我想说其实property的用法并不是主要用来做类型检查。反而更多应该是用于简化操作的目的。

写之前想聊一个古老的话题。年初的时候刚接触flask。当时用SQLAlchemy的Model模型去构建了一张表。在刚入门的时候,觉得仅仅是不用写SQL这么一回事

现在看来,其实SQLAlchemy的用法隐含的思想是将一个表抽象为一个对象,或者一个实体。对于实体的内容进行解读。数据库只是作为存放内容的工具而已。

初学的时候,后端要返回数据给前端。按照上面的认知,先用dbname.query.all()查出表中的所有数据。

然后就开始傻傻的写for循环。比如查出来的数据要转成字典。会在循环前定义一个空字典。每次循环用i计数器的值作为字典键值啊这种傻傻的用法。

不过不管怎么说,从功能上面来看,还是完整完成了要求。不得不说是一份不精致的答案。甚至当初因为这种思想,一直搞不清楚json值的正确用法。那是因为自己去实现了从数据到json的转换。所以不优雅,不高效。

混着混着,时间就过去了这么几个月。有些事情就是在没有思考的情况下突然想明白的。不知道是个人风格或是其他。总之现在在用这个的时候就很明确为什么要这么干而不是选择其他方法。

可能更加理解python的目的性了吧:简洁胜于高效

高不高效的事情我还没到可以讨论的阶段。上次看dict类型的实现就明白了。并没有那么多可以研习人家造出来轮子的原理的时间。先用,哪天自然就懂了

接下来简单写一下代码。

基础代码是这样:

 # SQLAlchemy Model
class Tools(db.Model):
id = db.Column(db.String(100), primary_key=True)
toolname = db.Column(db.String(100))
tooldir = db.Column(db.String(100))
toolurl = db.Column(db.String(100))
tooltext = db.Column(db.String(100)) # Tool.json(demo)
[
{"toolId":1,"toolName":"工具1","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":2,"toolName":"工具2","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":3,"toolName":"工具3","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":4,"toolName":"工具4","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":5,"toolName":"工具5","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":6,"toolName":"工具6","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"}
] # Flask route restful api
@ns.route('/store')
class Store(Resource):
def get(self):
tools = Tools.query.all()
# do something to change variable name then return
return jsonify(tools)

简单介绍一下上面代码的内容。

1-7行:表的模型类

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

21-27行:后端接口实现(注释部分代表省略了数据处理的代码)

由于后端接口自己去写一个转换的代码,按照以前那种写法会很长。不贴出来了。自己去优化一个更无聊。(码代码久了,更喜欢偷懒了)

所以接下来贴使用property来实现的接口处理

 # SQLAlchemy Model
class Tools(db.Model):
id = db.Column(db.String(100), primary_key=True)
toolname = db.Column(db.String(100))
tooldir = db.Column(db.String(100))
toolurl = db.Column(db.String(100))
tooltext = db.Column(db.String(100)) @property
def serialize(self):
series = {
'toolId': self.id,
'toolName': self.toolname,
'tooldir': self.tooldir,
'toolUrl': self.toolurl,
'toolText': self.tooltext
}
return series # Tool.json(demo)
[
{"toolId":1,"toolName":"工具1","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":2,"toolName":"工具2","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":3,"toolName":"工具3","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":4,"toolName":"工具4","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":5,"toolName":"工具5","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":6,"toolName":"工具6","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"}
] # Flask route restful api
@ns.route('/store')
class Store(Resource):
def get(self):
return jsonify([i.serialize for i in Tools.query.all()])

感觉清晰明了很多。

顺便在实现这个的过程中,也算清楚了python自带的json包的方法和flask的jsonify方法的区别是什么。

不得不说,jsonify真是偷懒的好方法。

ps:吐槽一下这狗屎代码插入器。显示在博客当中的时候会因为dom结构宽度不够直接把代码撑到行号中间去。wtf。只能删减掉一些内容了

聊聊属性方法property的用法的更多相关文章

  1. python-静态方法staticmethod、类方法classmethod、属性方法property

    Python的方法主要有3个,即静态方法(staticmethod),类方法(classmethod)和实例方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def  ...

  2. 【面试必问】python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别

    [面试必问]python实例方法.类方法@classmethod.静态方法@staticmethod和属性方法@property区别 1.#类方法@classmethod,只能访问类变量,不能访问实例 ...

  3. python_面向对象——属性方法property

    1.属性方法 class Student(object): def __init__(self,name): self.name = name @property #属性方法:把一个方法变成一个静态的 ...

  4. 初识python: 属性方法 @property

    属性方法:通过@property把一个方法变成一个静态属性 实例: 调用航班的状态 # 查看航班状态 import random class CheckState(object): def __ini ...

  5. 面向对象【day08】:静态方法、类方法、属性方法(九)

    本节内容 概述 静态方法 类方法 属性方法 总结 一.概述 前面我们已经讲解了关于类的很多东西,今天讲讲类的另外的特性:静态方法(staticmethod).类方法(classmethod).属性方法 ...

  6. Python 静态方法、类方法和属性方法

    Python 静态方法.类方法和属性方法 静态方法(staticmethod) staticmethod不与类或者对象绑定,类和实例对象都可以调用,没有自动传值效果,Python内置函数staticm ...

  7. Python的程序结构[1] -> 方法/Method[1] -> 静态方法、类方法和属性方法

    静态方法.类方法和属性方法 在 Python 中有三种常用的方法装饰器,可以使普通的类实例方法变成带有特殊功能的方法,分别是静态方法.类方法和属性方法. 静态方法 / Static Method 在 ...

  8. Python 属性方法、类方法、静态方法、 特殊属性__doc__ (内建属性)

    总结:和类的关联性讲:属性方法>类方法>静态方法 属性方法@property:仅仅是调用方式不用+括号. 类方法@classmethod:访问不了累的属性变量,只可以访问类变量. 静态方法 ...

  9. <s:property>的用法(jsp获取action中的值或者方法)

    1,访问Action值栈中的普通属性:  <s:property value="attrName"/>  2,访问Action值栈中的对象属性(要有get set方法) ...

随机推荐

  1. pycharm安装和首次使用

    PyCharm 是由 JetBrains 打造的一款 Python IDE,支持 macOS. Windows. Linux 系统. PyCharm 功能 : 调试.语法高亮.Project管理.代码 ...

  2. Linux端图形处理工具ImageMagick在Centos上的安装

    一.安装背景程序要用到用户上传图片,编辑的功能,能进行旋转,裁剪,缩放等. 二.ImageMagick介绍 ImageMagick是用C语言开发图片处理程序.可以对图片进行改变大小.旋转.锐化.减色或 ...

  3. [转载] ZooKeeper原理及使用

    转载自http://www.wuzesheng.com/?p=2609 ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordina ...

  4. [转载] Java NIO教程

    转载自并发编程网 – ifeve.com http://ifeve.com/java-nio-all/ 关于通道(Channels).缓冲区(Buffers).选择器(Selectors)的故事. 从 ...

  5. python基础-------函数(一)

    一 为何要有函数?不加区分地将所有功能的代码垒到一起, 问题是: 代码可读性差 代码冗余 代码可扩展差 如何解决?函数即工具,事先准备工具的过程是定义函数,拿来就用指的就是函数调用 结论:函数使用必须 ...

  6. Python异步处理

    回调函数是实现异步操作的常用手法 1.callback版本的示例,其中framework调用logic,在完成某些操作或者接收到信号后,用callback返回异步结果 #!/usr/bin/env p ...

  7. 【转】MYSQL DBA知识了解-面试准备

    http://www.itpub.net/forum.php?mod=viewthread&tid=1825849 公司招聘MySQL DBA,也面试了10个2年MySQL DBA工作经验的朋 ...

  8. BootStrap的入门和响应式的使用

    在做前端开发中,其实有百分之四十的时间用来布局写样式,百分之三十用来写JS逻辑交互,百分之三十时间用来测试调bug,可以看的到的是,用在布局+样式的时候会比较多, 所以会有很多的前端框架诞生,例如bo ...

  9. ConstraintLayout+radioGroup做一个tab.简单好用。

    主页tab是必须会有的,各种实现也很多.各有千秋.但目标都是简单.可控.今天用ConstraintLayout+radioGroup做一个tab.简单性可控性都还可以.本文目的把ConstraintL ...

  10. 关于Springboot整合mybatis启动的问题

    由于是刚pull下来的项目整体也不熟悉,然后项目无法正常启动,爆出的异常为: Invalid bound statement (not found) 这是由于创建的新模块mapper与扫描mapper ...