s4 model

- Model

    Django:
        - 路由
        - 视图
        - 模板
        - ORM(类-表;对象-行; pymysql连接数据库)
        
    Torando:
        - 路由
        - 视图
        - 模板
        - 自由:pymysql;SqlAchemy
    Flask:
        - 路由
        - 视图
        - 模板(第三方的组件)
        - 自由:pymysql;SqlAchemy

        
    1.创建数据库
    2.setting 配置
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME':'s4day70db',
                'USER': 'root',
                'PASSWORD': '',
                'HOST': 'localhost',
                'PORT': '3306',
            }
        }
    3.project下的 __init__
        import pymysql
        pymysql.install_as_MySQLdb()
        
    4.models.py
        from django.db import models

        class UserInfo(models.Model):
            nid =models.BigAutoField(primary_key=True)
            username=models.CharField(max_length=32)
            password=models.CharField(max_length=64)
        
    5.注册app
        INSTALLED_APPS = [
            'django.contrib.admin',
            'django.contrib.auth',
            'django.contrib.contenttypes',
            'django.contrib.sessions',
            'django.contrib.messages',
            'django.contrib.staticfiles',
            'app01',
        ]
    6.创建数据库表
        命令:
            python manage.py makemigrations
            python manage.py migrate
    7.创建表
    
        class UserGroup(models.Model):
            title=models.CharField(max_length=32)

        class UserInfo(models.Model):
            nid =models.BigAutoField(primary_key=True)
            user=models.CharField(max_length=32)
            password=models.CharField(max_length=64)
            # age=models.IntegerField(null=True)
            age=models.IntegerField(default=1)
            # ug_id
            ug=models.ForeignKey('UserGroup',null=True)
            
    # 默认使用SQLlite数据库    
    # ORM利用第三方工具pymysql链接数据库
    # 操作mysql默认使用mysqldb,python3中需要修改链接Mysql方式            


    - ORM操作表
        创建表
        修改表
        删除表

    - 操作数据行
        增删改查

    - 字段类型
        - 字符串
            EmailField(CharField):
            IPAddressField(Field)
            URLField(CharField)
            SlugField(CharField)
            UUIDField(Field)
            FilePathField(Field)
            FileField(Field)
            ImageField(FileField)
            CommaSeparatedIntegerField(CharField)
            a. 直接通过
                models.Userinfo.objects.create(....)
                # ModelForm
            b. 影响Django自带的管理工具admin
            
        - 时间类:
            models.DateTimeField(null=True)
            
        - 数字:
            num = models.IntegerField()
            num = models.FloatField()
            mum = models.DecimalField(max_digits=30,decimal_places=10)
            
        - 枚举(Django):
            color_list = (
                (1,'黑色'),
                (2,'白色'),
                (3,'蓝色')
            )
            color = models.IntegerField(choices=color_list)
        
            # 自己操作:自己取,自己用
            # 给Django admin使用    
            # 应用场景:选项固定
            # FK选项动态
                        
    - 字段参数:
        null=True,
        default='1111',
        db_index=True,
        unique=True
        
        class Meta:
            # unique_together = (
            #     ('email','ctime'),
            # )
            # index_together = (
            #     ('email','ctime'),
            # )
        # 联合唯一索引
        # 联合索引
    
    
    - DjangoAdmin提供的参数:
    
        verbose_name        Admin中显示的字段名称
        blank               Admin中是否允许用户输入为空
        editable            Admin中是否可以编辑
        help_text           Admin中该字段的提示信息
        choices             Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
                            如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)

        error_messages      自定义错误信息(字典类型),从而定制想要显示的错误信息;
                            # 优先级较低,低于ModelForm
                            字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
                            如:{'null': "不能为空.", 'invalid': '格式错误'}

        validators          自定义错误验证(列表类型),从而定制想要的验证规则
                            from django.core.validators import RegexValidator
                            from django.core.validators import EmailValidator,URLValidator,DecimalValidator,\
                            MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
                            如:
                                test = models.CharField(
                                    max_length=32,
                                    error_messages={
                                        'c1': '优先错信息1',
                                        'c2': '优先错信息2',
                                        'c3': '优先错信息3',
                                    },
                                    validators=[
                                        RegexValidator(regex='root_\d+', message='错误了', code='c1'),
                                        RegexValidator(regex='root_112233\d+', message='又错误了', code='c2'),
                                        EmailValidator(message='又错误了', code='c3'), ]        


                                        
    - 不考虑django admin
        - 字段:
            username=models.CharField(max_length=32)
            
            username=models.IntegerField()
            username=models.DecimalField()
            
            username=models.DateTimeField()
            username=models.DateField()
            
            
            color_list=(
                (1,"黑色"),
                (2,"白色"),
                (3,"蓝色"),
            )
            color =models.IntegerField(choices=color_list)
        
        - 参数:
            null=True
            default ='xx'
            db_index =True
            unique =True
            primary_key =True
            max_length =12
            
            claas Meta:
                # unique_together=(
                #     ('email','ctime'),
                # )
                # index_together=(
                #     ('email','ctime'),
                # )

                
    - 考虑 django admin
    
        - 字段:做正则验证
            邮箱
            IP
            URL
            UUID
            。。。
            
        - 参数:
            blank
            error _message={}
            validators =[] 自定义正则
                                        
                                        
    - 操作总结:
    
        - 增删改查
        - filter(),update(),create()  可以使用字典:**
        - all()  values()   values_list()
        - FK
            正向:
                filter() values,values_list() -> 跨表  fk__xxx
                objs = all()
                for obj in objs:
                    obj.fk.
            反向:
                filter() values,values_list() -> 跨表  小写表名称__xxx
                objs = all()
                for obj in objs:
                    obj.表名称_set.all()
        - M2M:
            - M2M
            - 自定义
            - M2M+自定义
                    
            正向(有M2M):
                obj = ...
                obj.m.add()
                obj.m.remove()
                obj.m.set()
                obj.m.clear()
                obj.m.all()...
            反向:
                obj ...
                obj.表名_set.add
                ...
                
            M2M+自定义
                obj.m.clear()
                obj.m.all()...
    - 别名:
    
        # class UserType(models.Model):
        #     title = models.CharField(max_length=32)
        #
        # class User(models.Model):
        #     username=models.CharField(max_length=32)
        #     ut =models.ForeignKey('UserInfo',related_name='users')

        # 反向:
        # related_name='xxxx'
        #     user_set ===> xxxx
        # related_query_name='xxxx'
        #     user_set ===> xxxx_set

posted @ 2020-01-18 21:01  badweather  阅读(57)  评论(0编辑  收藏  举报