• 初步了解 Django Models


    Part1:了解主键

      

    1.      Python和Django版本如下:

    E:\django>python3 -V

    Python 3.5.2

    E:\django>python3 -m django --version

    2.0rc1

    2.      创建项目learndjango和应用testdjangofield

    E:\django>django-admin startproject learndjango

    E:\django>cd learndjango

    E:\django\learndjango>python3 manage.py startapp testdjangofield

    3.      编辑项目应用learndjango下settings.py配置文件

    添加应用testdjangofield、修改语言和时区

    INSTALLED_APPS = [

        'django.contrib.admin',

        'django.contrib.auth',

        'django.contrib.contenttypes',

        'django.contrib.sessions',

        'django.contrib.messages',

        'django.contrib.staticfiles',

        'testdjangofield',

    ]

    LANGUAGE_CODE = 'zh-hans'

    TIME_ZONE = 'Asia/Shanghai'

    4.      编辑应用testdjangofield下的models.py文件

    添加三个数据模型,主键定义方式不同

    表1虽然没有明确定义主键,但是django会默认定义一个主键id

    from django.db import models

     

    class Table001(models.Model):

        myCharField = models.CharField(max_length=32)

     

    class Table002(models.Model):

        myId = models.AutoField(primary_key=True)

        myCharField = models.CharField(max_length=32)

     

    class Table003(models.Model):

        myId = models.BigAutoField(primary_key=True)

        myCharField = models.CharField(max_length=32)

    5.      编辑应用testdjangofield下的admin.py文件

    注册三个数据模型到admin

    from django.contrib import admin

     

    from testdjangofield.models import Table001,Table002,Table003

     

    admin.site.register(Table001)

    admin.site.register(Table002)

    admin.site.register(Table003)

    6.      在testdjangofield\migrations目录下创建数据迁移文件并执行

    E:\django\learndjango>python3 manage.py makemigrations

    E:\django\learndjango>python3 manage.py migrate

    7.      创建数据库超级用户/密码:admin/Django12

    E:\django\learndjango>python3 manage.py createsuperuser

    Username (leave blank to use 'bing'): admin

    Email address: admin@admin.com

    Password:Django12

    Password (again): Django12

    Superuser created successfully.

    8.      启动项目

    E:\django\learndjango>python3 manage.py runserver

    Performing system checks...

    System check identified no issues (0 silenced).

    December 21, 2017 - 14:22:59

    Django version 2.0rc1, using settings 'learndjango.settings'

    Starting development server at http://127.0.0.1:8000/

    Quit the server with CTRL-BREAK.

    9.      访问后台管理页面

    打开浏览器访问http://127.0.0.1:8000/admin/

    输入超级用户账号/密码,进入管理页面后为Table00*s各添加几条记录

      

    10.    使用工具SQLite Expert Personal打开sqlite数据库文件

    数据库文件位置:learndjango\ db.sqlite3

    可以查看并编辑三个表的记录

     

     

     

    Part2:了解布尔类型

      

    11.    修改models.py文件,添加第4个数据模型,了解布尔类型字段

    class Table004(models.Model):

        #布尔类型

        myBooleanField1 = models.BooleanField(verbose_name='Admin中字段的显示名称')#默认checkbox格式

        myBooleanField2 = models.BooleanField(u'Admin中字段的显示名称')#默认checkbox格式

        myBooleanField3 = models.BooleanField(default=True, db_column='字段列名')#默认勾选chockbox

        myNullBooleanField1 = models.NullBooleanField()#允许为null的布尔类型

        myNullBooleanField2 = models.NullBooleanField(default=True)#下拉框选择是或者否

    12.    修改admin.py,注册第4个数据模型到admin

    admin.site.register(Table004)

    13.    更新数据迁移文件并执行

    E:\django\learndjango>python3 manage.py makemigrations

    E:\django\learndjango>python3 manage.py migrate

    14.    启动项目并访问table004后台管理编辑页面

     

    Part3:了解字符和文本类型

      

    15.    修改models.py文件,添加第5个数据模型,了解字符类型和文本类型字段

    class Table005(models.Model):

        MY_CHOICES1 = (

            ('F','女'),

            ('M','男'),

        )

        #字符或文本类型

        myCharField1 = models.CharField(max_length=32, default='这里是默认值')

        myCharField2 = models.CharField(max_length=32, editable=False, default='admin下不能编辑')

        myCharField3 = models.CharField(max_length=32, blank=False, null=False)

        myCharField4 = models.CharField(max_length=10, choices=MY_CHOICES1)

        myCharField5 = models.CharField(max_length=1000, help_text='Admin中该字段的提示信息')

        myTextField = models.TextField(default='请输入文本')

    16.    修改admin.py,注册第5个数据模型到admin

    admin.site.register(Table005)

    17.    更新数据迁移文件并执行

    E:\django\learndjango>python3 manage.py makemigrations

    E:\django\learndjango>python3 manage.py migrate

    18.    启动项目并访问table005后台管理编辑页面

    editable=False的属性前台没有显示

     

    Part4:了解日期类型

      

    19.    修改models.py文件,添加第6个数据模型,了解日期和时间类型字段

    class Table006(models.Model):

        #日期或时间类型

        myDateField1 = models.DateField()

        myDateField2 = models.DateField(u'创建日期', auto_now_add=True)

        myDateField3 = models.DateField(u'修改日期', auto_now=True)

        myDateTimeField1 = models.DateTimeField()

        myDateTimeField2 = models.DateTimeField(auto_now_add=True)

        myDateTimeField3 = models.DateTimeField(auto_now=True)

        myTimeField = models.TimeField()

    20.    修改admin.py,注册第6个数据模型到admin

    admin.site.register(Table006)

    21.    更新数据迁移文件并执行

    E:\django\learndjango>python3 manage.py makemigrations

    E:\django\learndjango>python3 manage.py migrate

    22.    启动项目并访问table006后台管理编辑页面

    auto_now_add=True和auto_now=True的属性前台没有显示

     

    Part5:了解数值类型

      

    23.    修改models.py文件,添加第7个数据模型,了解数值类型字段

    class Table007(models.Model):

        #数值类型

        myFloatField = models.FloatField()

        myIntegerField = models.IntegerField(choices=[(0, '张三'),(1, '王二麻子'),],default=1)#(-2147483648, 2147483647)

        myPositiveIntegerField = models.PositiveIntegerField()#(0, 2147483647)

        myBigIntegerField = models.BigIntegerField()#(-9223372036854775808, 9223372036854775807)

        mySmallIntegerField = models.SmallIntegerField()#(-32768, 32767)

        myPositiveSmallIntegerField = models.PositiveSmallIntegerField()#(0, 32767)

        myDecimalField = models.DecimalField(max_digits=5, decimal_places=2)

    24.    修改admin.py,注册第7个数据模型到admin

    admin.site.register(Table007)

    25.    更新数据迁移文件并执行

    E:\django\learndjango>python3 manage.py makemigrations

    E:\django\learndjango>python3 manage.py migrate

    26.    启动项目并访问table007后台管理编辑页面

     

    Part6:了解特殊格式的字符/文本类型

      

    27.    修改models.py文件,添加第8个数据模型,了解特殊格式的类型字段

    class Table008(models.Model):

        #特殊格式的CharField/TextField

        myGenericIPAddressField = models.GenericIPAddressField(protocol='both')#IP地址,protocol可以是:both、ipv4、ipv6

        myEmailField = models.EmailField(unique=True, max_length=254)#电子邮箱

        myURLField = models.URLField()#地址正则表达式

        mySlugField = models.SlugField()#连接符、下划线、字母、数字

    28.    修改admin.py,注册第8个数据模型到admin

    admin.site.register(Table008)

    29.    更新数据迁移文件并执行

    E:\django\learndjango>python3 manage.py makemigrations

    E:\django\learndjango>python3 manage.py migrate

    30.    启动项目并访问table008后台管理编辑页面

     

    Part7:了解文件上传

      

    31.    修改models.py文件,添加第9个数据模型,了解文件上传

    class Table009(models.Model):

        #文件上传

        myFileField = models.FileField(upload_to = './%Y/%m/%d/')

    32.    修改admin.py,注册第9个数据模型到admin

    admin.site.register(Table009)

    33.    修改settings.py文件,配置文件上传目录

    STATIC_URL = '/static/'

    STATICFILES_DIRS = (

        os.path.join(BASE_DIR, "static"),

    )

    # 上传文件目录

    MEDIA_ROOT = os.path.join(BASE_DIR, 'static/upload/')

    MEDIA_URL = '/static/upload/'

    34.    更新数据迁移文件并执行

    E:\django\learndjango>python3 manage.py makemigrations

    E:\django\learndjango>python3 manage.py migrate

    35.    启动项目并访问table009后台管理编辑页面

    选择文件上传,保存可以查看上传的文件

     

    文件地址是:http://127.0.0.1:8000/static/upload/2017/12/26/mt.jpg

    后台存储数据如下:

     

    Part8:了解图片上传

      

    36.    修改models.py文件,添加第10个数据模型,了解图片上传

    class Table010(models.Model):
        #图片上传
        myImageField = models.ImageField(upload_to = './image/%Y/%m/%d/')

    37.    修改admin.py,注册第10个数据模型到admin

    admin.site.register(Table010)

    38.    安装图像处理库Pillow

    E:\django\learndjango>pip --default-timeout=6000 install pillow

    39.    更新数据迁移文件并执行

    E:\django\learndjango>python3 manage.py makemigrations

    E:\django\learndjango>python3 manage.py migrate

    40.    启动项目并访问table010后台管理编辑页面

    如果上传的不是图片,则提示错误

    选择图片上传,保存可以查看上传的图片

    图片路径:http://127.0.0.1:8000/static/upload/image/2017/12/27/P1.png

    Part9:了解FilePathField

      

    41.    修改models.py文件,添加第11个数据模型,了解FilePathField

    from django.conf import settings

    class Table011(models.Model):
        #服务器文件引用
        myFilePathField1 = models.FilePathField(path=settings.FILE_PATH_FIELD_DIRECTORY)#默认不包含子目录
        myFilePathField2 = models.FilePathField(path=settings.FILE_PATH_FIELD_DIRECTORY, recursive=True)#包含子目录

    42.    修改admin.py,注册第11个数据模型到admin

    admin.site.register(Table011)

    43.    修改settings.py文件,添加配置

    # 服务器文件目录
    FILE_PATH_FIELD_DIRECTORY = 'C:\\Users\\bing\\Desktop\\temp'

    44.    更新数据迁移文件并执行

    E:\django\learndjango>python3 manage.py makemigrations

    E:\django\learndjango>python3 manage.py migrate

    45.    启动项目并访问table011后台管理编辑页面

    控件可以直接访问服务器某个指定目录下的文件,不清楚这个控件有什么用

    Part10:了解表之间的关系

      

    46.    修改models.py文件,添加3个数据模型

    class TableBoy(models.Model):

        boyName = models.CharField(u'男人姓名', max_length=32, blank=False, null=False)

        boyAge = models.PositiveSmallIntegerField(u'年龄')

        boyHeight = models.DecimalField(u'身高CM', max_digits=4, decimal_places=1)

        boyWeight = models.DecimalField(u'体重KG', max_digits=4, decimal_places=1)

        boyEmail = models.EmailField(unique=True, max_length=254)

     

    class TableGirl(models.Model):

        girlName = models.CharField(u'女人姓名', max_length=32, blank=False, null=False)

        girlAge = models.PositiveSmallIntegerField(u'年龄')

        girlHeight = models.DecimalField(u'身高CM', max_digits=4, decimal_places=1)

        girlWeight = models.DecimalField(u'体重KG', max_digits=4, decimal_places=1)

        girlEmail = models.EmailField(unique=True, max_length=254)

        lover = models.ManyToManyField(TableBoy)#恋爱关系,多对多

        marry = models.OneToOneField(TableBoy, on_delete=models.CASCADE, related_name='husband')#婚姻关系,一对一

     

    class TableBaby(models.Model):

        babyName = models.CharField(u'婴儿姓名', max_length=32, blank=False, null=False)

        mommy = models.ForeignKey(TableGirl, on_delete=models.CASCADE)#母女关系,一对多

    47.    修改admin.py,注册3个数据模型到admin

    admin.site.register(TableBoy)

    admin.site.register(TableGirl)

    admin.site.register(TableBaby)

    48.    更新数据迁移文件并执行

    E:\django\learndjango>python3 manage.py makemigrations

    E:\django\learndjango>python3 manage.py migrate

    49.    查看后台数据库表

    TableBoy

     

    TableGirl,marry_id体现的是1对1的关系

    婚姻关系中男女关系是唯一的,不允许重婚

    1对1的关系相当于外键+唯一索引

     

    TableBaby,mommy_id体现的是1对多(或者多对1)关系

    1个妈妈可以有多个孩子

     

    TableGirl_lover,tablegirl_id和tableboy_id体现的是多对多关系

    1个男孩可以和多个女孩儿交往,1个女孩可以和多个男孩儿交往

     

    50.    补充几个概念

    主键:主键一般采用无意义的数字或字符,能唯一地标识表中的每一行记录

    外键:外键用于建立表之间的关系,例如员工表、工资表

    索引:索引可以提高索引字段的查询速度,减少分组和排序时间

    唯一索引:唯一索引可以保证数据记录的唯一性

    主键只能有一个,索引可以有多个

    表之间的关系有三种:一对一、一对多(多对一)、多对多

     =====END=====

  • 相关阅读:
    【PAT甲级】1054 The Dominant Color
    【PAT甲级】1001 A+B Format
    【算法】二分排序和二分查找
    【PAT甲级】1008 Elevator (20分)
    移动端工作准备
    媒体查询
    多列布局
    怪异盒模型
    弹性盒
    圆角
  • 原文地址:https://www.cnblogs.com/sam11/p/8086608.html
Copyright © 2020-2023  润新知