Skip to main content

一个针对于flask框架的序列化工具

Project description

flask_simpleserialize

  • 一个适用于flask框架(轻型的、简单的)序列化工具

使用介绍

pip install flask-simpleserialize

当前版本为0.0.1(^_^),以后还会继续更新(有时间就写)

它不需要你在你的model层实例上面再继承啊什么的,完全不需要,接下来看操作不废话

个人觉得不管使用什么框架,序列化这一步都应该单独提出来。用作一层

model.py

from sqlalchemy import orm, BIGINT, Column, TIMESTAMP, BOOLEAN, VARCHAR, TEXT, Integer, DateTime
from sqlalchemy.dialects.mysql import TINYINT
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql import func

Base = declarative_base()

# model类必须要继承declarative_base()
class AppletUser(Base):
    __tablename__ = "applet_user"

    id = Column(BIGINT,primary_key=True,info='用户主键id')
    wx_unique_identification = Column(VARCHAR(256),info='wx端传入的唯一标识',default='')
    wx_user_nickname = Column(VARCHAR(256),info='wx用户的昵称',default="")
    # wx_user_nickname = Column(VARCHAR(256),info='wx用户的昵称',default="dw{}".format(client.get_guid()))
    wx_user_avatar = Column(VARCHAR(256),info='wx用户的头像url',default='')
    wx_user_phone = Column(VARCHAR(256),info='用户电话号码',default='')
    wx_user_country = Column(VARCHAR(256),info='用户所在国家',default='中国')
    wx_user_province = Column(VARCHAR(256),info='用户所在省份/州',default='北京')
    wx_user_city = Column(VARCHAR(256),info='用户所在城市',default='北京')
    wx_user_gender = Column(TINYINT,info='0为未知,1为男性,2为女性',default=0)
    user_memberorder = Column(TINYINT,info='0为普通用户,1为白银会员,2为黄金会员,3为铂金会员,4为钻石会员,5为超级会员',default=0)
    user_integral = Column(BIGINT, info='用户积分', default=0)
    user_balance = Column(BIGINT,info='用户余额',default=0)
    is_activate = Column(BOOLEAN,info='是否激活,默认为激活状态',default=False)
    soft_delete = Column(BOOLEAN, info='后台系统是否软删除删除,True为删除,False为未删除',default=False)
    create_time = Column(DateTime, server_default= func.now(), info='用户创建时间')
    update_time = Column(DateTime, server_default= func.now(), onupdate=func.now(), info='用户更新时间')

    # TODO 由于wx官方不会对用户以前的头像url进行清除,一旦wx用户更改头像就会造成wx用户头像更改小程序端不会更改的问题,
    #  所以当用户换头像的时候小程序也要跟着换,特定义此字段用以存储用户以前的头像
    user_previous_avatar_text = Column(TEXT,info='存储用户以前头像URL')
	
    

    def __repr__(self):
        return "<AppletUser(id='%s',wx_user_nickname='%s')>"%(self.id,self.wx_user_nickname)

serialize.py

from flask_simpleserialize import ModelSerialize
class UserSerialize(ModelSerialize):
    class Meta:
        model = AppletUser
        serialize_fields = ['id','wx_unique_identification']
        deserialization_fields = ['create_time']

    def get(self):
        Users = SessionFactory.session().query(AppletUser).all()
        data = self.data(Users)
        return data

你只需要自己写一个类导入ModelSerialize模块然后继承,再其内部定义一个Meta类(必须要定义的呦),Meta类里面写入model属性,属性值就是你model实例名称(也是必需要写的),还有再写入你需要序列化/反序列化的字段值。serialize_fieldsdeserialization_fields名称是不能更改的。然后你需要定义一个方法,方法内部执行查询语句,将结果丢给data方法.剩下的就不用管了,ModelSerialize会全部帮你处理好的

router.py

from serialize import UserSerialize
from flask import Blueprint,request,jsonify
from flasgger import swag_from

user = Blueprint('user',__name__)
@hello_rbp.route('/user',methods=["GET"])
@swag_from('../docs/doc/user.yaml')
def get_user():
    """获取用户信息
    """
    user_serialize = UserSerialize()
    result = user_serialize.get()

    return jsonify(result)

请看结果

image-20220127195443704

当然了它也支持对序列化的字段进行更改,但是你必须要在你定义的model类中加入cnme方法并用@property装饰器将其装饰成属性

代码如下所示

from sqlalchemy import orm, BIGINT, Column, TIMESTAMP, BOOLEAN, VARCHAR, TEXT, Integer, DateTime
from sqlalchemy.dialects.mysql import TINYINT
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql import func

Base = declarative_base()

# 看到没它还是像以前一样
class AppletUser(Base):
    __tablename__ = "applet_user"

    id = Column(BIGINT,primary_key=True,info='用户主键id')
    wx_unique_identification = Column(VARCHAR(256),info='wx端传入的唯一标识',default='')
    wx_user_nickname = Column(VARCHAR(256),info='wx用户的昵称',default="")
    # wx_user_nickname = Column(VARCHAR(256),info='wx用户的昵称',default="dw{}".format(client.get_guid()))
    wx_user_avatar = Column(VARCHAR(256),info='wx用户的头像url',default='')
    wx_user_phone = Column(VARCHAR(256),info='用户电话号码',default='')
    wx_user_country = Column(VARCHAR(256),info='用户所在国家',default='中国')
    wx_user_province = Column(VARCHAR(256),info='用户所在省份/州',default='北京')
    wx_user_city = Column(VARCHAR(256),info='用户所在城市',default='北京')
    wx_user_gender = Column(TINYINT,info='0为未知,1为男性,2为女性',default=0)
    user_memberorder = Column(TINYINT,info='0为普通用户,1为白银会员,2为黄金会员,3为铂金会员,4为钻石会员,5为超级会员',default=0)
    user_integral = Column(BIGINT, info='用户积分', default=0)
    user_balance = Column(BIGINT,info='用户余额',default=0)
    is_activate = Column(BOOLEAN,info='是否激活,默认为激活状态',default=False)
    soft_delete = Column(BOOLEAN, info='后台系统是否软删除删除,True为删除,False为未删除',default=False)
    create_time = Column(DateTime, server_default= func.now(), info='用户创建时间')
    update_time = Column(DateTime, server_default= func.now(), onupdate=func.now(), info='用户更新时间')

    # TODO 由于wx官方不会对用户以前的头像url进行清除,一旦wx用户更改头像就会造成wx用户头像更改小程序端不会更改的问题,
    #  所以当用户换头像的时候小程序也要跟着换,特定义此字段用以存储用户以前的头像
    user_previous_avatar_text = Column(TEXT,info='存储用户以前头像URL')
	
    ########差异之处##############
    @property
    def cname(self):
        return {'wx_unique_identification':'unique_identification'}

    def __repr__(self):
        return "<AppletUser(id='%s',wx_user_nickname='%s')>"%(self.id,self.wx_user_nickname)

cname属性内部直接返回一个字典,字典的key为原始字段名,value则为序列化之后的名字

如图所示

image-20220127200040550

^_^ 以后会继续更新滴

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask-simpleserialize-0.0.3.tar.gz (5.3 kB view hashes)

Uploaded Source

Built Distribution

flask_simpleserialize-0.0.3-py3-none-any.whl (6.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page