flask模块化,flask实例

  flask模块化,flask实例

  我们做后台接口的时候,json数据格式是最常用的返回值。

  (视频教程推荐:flask视频教程)

  Flask,返回json数据格式,我们可以使用flask的jsonify函数。

  基本序列可以直接序列化,但更多情况下,我们要返回前端的是从数据库中查询出来的模型对象。那么如何序列化一个模型对象呢?

  追溯flask的源代码,我们会发现flask在处理特殊类型的数据时,使用了json包下的一个JSON编码器类,这个类有一个非常重要的功能,default()。日期时间、日期、uuid、html等。在这里被特别处理,但是模型对象没有被处理。

  于是就有了这个想法。我们需要重写JSONEncoder的默认函数,想办法把模型对象转换成dict类型,这样jsonify就可以直接处理了。

  那么如何处理模型对象呢?

  一开始我想到了使用模型对象的__dict__属性,但是这个属性只有实例属性,没有类属性,所以使用这个属性显然是不可取的。

  我也认为我们通常需要定义一个字典类型。我们该如何处理?

  您可以使用d=dict()函数创建一个字典类型的变量。

  那么如果我们把模型对象实例作为参数传递给dict()可行吗?

  答案是可行的,但是我们需要在模型对象中定义两个方法,keys()方法和__getitem__()方法。

  keys()方法的返回值是一个序列,用来告诉dict当前dict()的键值。

  __getitem__()方法,用于将键值和值返回给dict()

  那么,如何在flask中序列化模型对象呢?答案就出来了。绝对代码

  如上图,定义类JsonEncode,继承flask.json下的JSONEncoder,然后重写里面的默认函数。其他不变,唯一的就是增加了模型对象的序列化。

  如果判断出当前对象(也就是我们上面定义的两个方法)中有key和__getitem__属性,就说明它是一个模型对象,它作为参数传递给dict(),

  然后用我们最后一个JsonEncoder函数替换flask.json下的JSONEncoder类。

  最后,在要序列化的模型下定义了keys()和__getitem__()方法。

  相关教程推荐:python web教程

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: