• django使用


    一、关于django项目中的文件夹中的__init__.py文件。该文件的作用是:告诉python解释器此文件夹是python模块文件夹。什么意思呢?比如,我在一个django工程里新建了一个普通文件夹,里面是没有__init__.py文件的,如图:,他会提示没有相应模块,而当我在里面新建了一个__init__.py文件后,就变成:。以后随着工程越来越复杂,必定要新建很多文件夹来存放更多的py文件,这个步骤一定不能漏(虽然pycharm新建python文件夹的时候会一并创建__init__.py)。

    二、关于makemigration和migrate(两个都是数据迁移)。这两个manage.py里面的命令都是和数据库有关的,makemigration是记录models.py里面模型的变化并将之保存为一个py文件,py文件保存到migration文件夹中,以如下的格式保存:

    class Migration(migrations.Migration):
    
        dependencies = [
            ('TTEST', '0001_initial'),
        ]
    
        operations = [
            migrations.AddField(
                model_name='test',
                name='hehe',
                field=models.IntegerField(default=3),
            ),
        ]
    

      而migrate则是读取migration文件夹相应的py文件,然后对数据内的表进行相应地变化,如上图的代码用migrate命令执行完后的变化:

    migrate有一个个人觉得挺好的方面,就是在models.py下删除了某个类的某项属性,不会删除有数据的列。例如刚刚的“hehe”列,假如有一项数据id=1,haha=1,hehe=1,则桑我注销掉hehe这属性时,再执行makemigration和migrate之后,数据库的“hehe”不会被移除

    class Test(models.Model):
        haha = models.IntegerField(default=2,unique=True)
        # hehe = models.IntegerField(default=3,unique=False)

    这个设定避免了编码时可能出现注销错了导致的数据丢失。

    三、关于继承AbstractUser这个类。AbstractUser类是django提供的一个用户类,要使用继承AbstractUser的用户类,需要在settings加入如下代码:

    AUTH_USER_MODEL = 'blog.Man'

    若是工程中自定义的User需要继承AbstractUser的话,一定要注意,User若是添加一个新的字段,注意要为该字段添加默认值,或者设置可为空。为什么呢?因为django的models在migrate的时候,若是没有类继承AbstractUser,就会默认在数据库中建一个auth_user表来保存超级用户的数据,而若是继承了AbstractUser类,超级用户的数据就会保存到该表中。此时如果扩展了更多的字段,但是没有默认值或者没有设置允许为空的话,就会有如下的提示:

    You are trying to add a non-nullable field 'sex' to user without a default; we can't do that (the database needs something to populate existing rows).
    Please select a fix:
     1) Provide a one-off default now (will be set on all existing rows)
     2) Quit, and let me add a default in models.py
    Select an option
    

      因此在继承了Abstractuser类的用户类添加更多字段时,要注意添加默认值或者设置为空.

  • 相关阅读:
    【题解】【神奇校内POIN模拟赛】小凯的疑惑
    【题解】【CF670C】cinema
    11 Remove Duplicates from Sorted Array II
    10 3SumClosest
    7 Container With Most Water
    8 String to Integer (atoi)
    9 3Sum
    6 Palindrome Number
    5 Zigzag Conversion
    4 Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/Xw-liang/p/4889397.html
Copyright © 2020-2023  润新知