python flask 后台获取字典数据 (由数据库模型中的属性名和值组成的字典)( __dict__)

python flask项目

models.py内容:


# import app as app_object      (从app项目中导入下面这个变量,方便以后统一修改域名)
# SERVER_ROOT = 'http://127.0.0.1:5000'
# 轮播图
class Banner(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    # 名字
    name = db.Column(db.String(50))
    # 点击后 链接地址
    link = db.Column(db.String(255))
    # 轮播图的地址
    image_url = db.Column(db.String(255))
    # 状态
    status = db.Column(db.Integer)

    # 返回字典:
    def obj_dict(self):
        '''

        :return: {属性:属性值}
        '''
        # __dict__会返回对象所有属性和属性值组成的字典
        a = self.__dict__
        obj_dict = copy.deepcopy(a)
        # 注意,不能直接导入app,会和上面定义的app冲突,这里更换名字为app_object
        # 下面是根据前台需要进行数据的修改调整
        obj_dict['image_url'] =  app_object.SERVER_ROOT + obj_dict['image_url']
        # 删除__dict__返回的多余的属性(可自行打印查看哪些多余)
        obj_dict.pop('_sa_instance_state')
        # 返回字典: {属性:属性值}
        return obj_dict

        
        

        
        
app项目中的__init__文件:

# 实例化对象
# __name__ 表示当前模块的名称,就是最外面项目名称app
app = Flask(__name__)
# 开启debug模式
app.debug = True

# 注册视图
from app.admin import admin as admin_blueprint
from app.api import api as api_blueprint

app.register_blueprint(api_blueprint,url_prefix="/api")
app.register_blueprint(admin_blueprint)

# 定义路径(app路径)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
SERVER_ROOT = 'http://127.0.0.1:5000'

api/views.py文件:


# 定义小程序首页数据的api
@api.route('/index/index')
def index_index():
    # data的banner数据组件列表套字典的格式;
    banner = []
    for i in Banner.query.all():
        j = i.obj_dict()
        banner.append(j)


    # data的channel数据组件列表套字典的格式;
    # 获取首页的5个分类导航
    channel = []
    for i in Category.query.filter_by(level=1).limit(5):
        j = i.obj_dict()
        channel.append(j)


    # 获取所有的一级分类
    categoryList = []
    for e in Category.query.filter_by(level=1):
        es = e.obj_dict()
        # 获取当前一级分类下所有子类
        ee = Category.query.filter_by(parentid=e.id).all()
        ids = []
        for x in ee:
            ids.append(x.id)
        # 获取当前子类下前7个商品
        gs = Goods.query.filter(Goods.cate_id.in_(ids)).all()[:7]
        goodsList = []
        for eee in gs:
            g = eee.obj_dict()
            goodsList.append(g)
        # 追加当前类下的商品数据
        es['goodsList'] = goodsList
        categoryList.append(es)

    data = {
        "errno":0,
        "errmsg":"",
        "data":{
            "banner":banner,
            "channel": channel,
            "categoryList": categoryList

        }
    }
    return jsonify(data)
 

猜你喜欢

转载自blog.csdn.net/qq_35515661/article/details/82975359