zoukankan      html  css  js  c++  java
  • 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
    
    
    
    
    
    # 改
    
    
    #删
    
    
    
    
  • 相关阅读:
    计算机网络基础:TCP运输连接管理(三次握手 + 四次挥手)
    Zookeeper集群及配置
    Maven安装及配置
    SpringMVC拦截器+Spring自定义注解实现权限验证
    Spring之AOP配置
    设置Google浏览器不缓存JS
    数据加密之AES
    SpringMVC配置多个自定义拦截器
    利用Zookeeper实现分布式锁
    数据加密之RSA
  • 原文地址:https://www.cnblogs.com/zhuchen/p/7442447.html
Copyright © 2011-2022 走看看