• models管理类抽取基类


    Models类 models.py

    
    # coding:utf-8
    
    from django.db import models
    from db.Base_model import Base_Model
    from db.Base_manager import BaseManager
    
    class UserInfoManager(BaseManager):
            def creat(self, username, password, email):
            '''添加对象'''
            userinfo = self.creat_one_object(username=username, password=password, email=email)
            return userinfo
    
        def select(self, username, password=None):
            '''查询对象'''
            print '%s--zh_cn-' % password
            if password is None:
                userinfo = self.get_one_object(username=username)
            else:
                userinfo = self.get_one_object(username=username, password=password)
            return userinfo
    
    
    class AddressManager(BaseManager):
        '''地址模型类管理器'''
    
        def get_default_address(self, userinfo_id):
            '''获取用户默认收货信息'''
            addr = self.get_one_object(userinfo_id=userinfo_id, is_def=True)
            return addr
    
        def add_one_address(self, userinfo_id, recipient_name, recipient_addr, recipient_phone, zip_code):
            '''添加一个用户收货信息'''
            # 查询用户是否有默认地址
            def_addr = self.get_one_object(userinfo_id=userinfo_id)
            if def_addr is None:
                # 如果用户么有默认地址
                addr = self.add_one_address(userinfo_id=userinfo_id, recipient_name=recipient_name,
                                            recipient_addr=recipient_addr,
                                            recipient_phone=recipient_phone, zip_code=zip_code, is_def=True)
            else:
                addr = self.add_one_address(userinfo_id=userinfo_id, recipient_name=recipient_name,
                                            recipient_addr=recipient_addr,
                                            recipient_phone=recipient_phone, zip_code=zip_code)
            return addr
    
    
    class UserInfo(Base_Model):
        username = models.CharField(verbose_name='用户名', max_length=20)
        password = models.CharField(verbose_name='密码', max_length=40)
        email = models.EmailField(verbose_name='邮箱')
    
        objects = UserInfoManager()  # 创建管理类对象
    
        class Meta:
            db_table = 'userinfos'  # 指定表名
    
    
    class Adderss(Base_Model):
        userinfo = models.ForeignKey('UserInfo', verbose_name='所属账户')
        recipient_name = models.CharField(max_length=20, verbose_name='收货人')
        recipient_phone = models.CharField(max_length=11, verbose_name='收货电话')
        recipient_addr = models.CharField(max_length=256, verbose_name='收货地址')
        zip_code = models.CharField(max_length=6, verbose_name='邮编')
        is_def = models.BooleanField(default=False, verbose_name='默认地址')
    
        objects = AddressManager()
    
        class Meta:
            db_table = 's_user_address'
    
    
    
    
    
    
    

    BaseManager.py

    # coding=utf-8
    from django.db import models
    import copy
    
    
    
    class BaseManager(models.Manager):
        '''定义管理器基类'''
        def get_all_valid_fields(self):
            '''获取self所在模型类的有效属性字符串列表'''
            # 1. 获取self所在的模型类
            models_class = self.model
            # 2. 获取模型类的属性元组
            attr_tuple = models_class._meta.get_fields()
            # 3. 定义一个列表用来保存满足的属性名称
            str_attr_list = []
            for attr in attr_tuple:
                # 如果有属性 是外键
                if isinstance(attr,models.ForeignKey):
                    str_attr = '%s_id'%attr.name
                else:
                    str_attr = attr.name
                str_attr_list.append(str_attr)
            return str_attr_list
    
    # 增
        def creat_one_object(self,**kwargs):
            '''创建一个self所在模型类的对象'''
            # 1.获取self所在模型类的有效属性字符串列表
            valid_fields = self.get_all_valid_fields()
            # 2.拷贝一份用来处理
            kws = copy.copy(**kwargs)
            # 3.去除kws 参数中self.model的无效属性
            for key in kws:
                if key not in valid_fields:
                    kwargs.pop(key)
            # 4.获取self所在模型类
            model_class = self.model
            # 5.创建一个模型类对象
            obj = model_class(**kwargs)
            # 6.调用对象的save方法保存进数据库
            obj.save()
            # 7.返回这个对象
            return obj
    
    # 查
        def get_one_object(self,**filters):
            '''根据filters条件查询self.model模型类的对象'''
            try:
                obj = self.get(**filters)
            except self.model.DoesNotExist:
                obj = None
            return obj
    
    
    # 根据条件查询self模型的查询集
        def get_object_list(self, filters={}, exclud_filters={}, order_by=('-pk',)):
            object_list = self.filter(**filters).exclude(**exclud_filters).order_by(*order_by)
    
            return object_list
    
    
    
    
    
    # 改
    
    
    #删
    
    
    
    
  • 相关阅读:
    C#中的 Attribute 与 Python/TypeScript 中的装饰器是同个东西吗
    如何用一个插件解决 Serverless 灰度发布难题?
    Seata 与三大平台携手编程之夏,百万奖金等你来拿
    函数计算异步任务能力介绍 任务触发去重
    混沌工程平台 ChaosBladeBox 新版重磅发布
    消息队列 RabbitMQ 遇上可观测业务链路可视化
    直播预告 | 容器服务 ACK 弹性预测最佳实践
    Serverless 在阿里云函数计算中的实践
    解密函数计算异步任务能力之「任务的状态及生命周期管理」
    可观测|时序数据降采样在Prometheus实践复盘
  • 原文地址:https://www.cnblogs.com/zhuchen/p/7442447.html
Copyright © 2020-2023  润新知