[Day8] 注册API – migrate

昨天我们说明了关於Field,今天我们要来说明的是migrate,这个部分是在每次我们在设定model、修改model之後,一定要做两个动作,让model的设定能够确实在资料库实现,这个动作非常重要。

首先我们先python manage.py makemigrations (app名称),如同指令的意思,这个动作是创建一个的migrate,这个migrate其实还是一个python档,里面记录着model的创建或者修改,我们可以来看看这张图

根据画面我们可以知道,我们在user\migrations底下创建了一个名为0001_initial.py,里面都是记录着model每次新增、修改的纪录。

我先带大家来看看我的0001_initial.py长甚麽样子

import django.contrib.auth.models
import django.contrib.auth.validators
from django.db import migrations, models
import django.utils.timezone


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('auth', '0012_alter_user_first_name_max_length'),
    ]

    operations = [
        migrations.CreateModel(
            name='UserProfile',
            fields=[
                ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
                ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
                ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
                ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
                ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
                ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
                ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
                ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
                ('id', models.CharField(max_length=150, primary_key=True, serialize=False)),
                ('account', models.CharField(max_length=150)),
                ('phone', models.CharField(max_length=150)),
                ('password', models.CharField(max_length=150)),
                ('email', models.CharField(max_length=150)),
                ('createtime', models.DateTimeField(auto_now_add=True)),
                ('updatetime', models.DateTimeField(auto_now=True)),
                ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
                ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
            ],
            options={
                'verbose_name': 'user',
                'verbose_name_plural': 'users',
                'abstract': False,
            },
            managers=[
                ('objects', django.contrib.auth.models.UserManager()),
            ],
        ),
    ]

密密麻麻有点长,简单介绍一下dependencies的意思是,依赖某个档案去做建立,意思是第二次的修改会依照第一次的创建的档案,有修改的内容再makemigrations,一样的内容不会再创建一次,只会新增修改的内容,再来底下opration的意思是建立一个名称UserProfile的model,有last_login变数名称为资料型态是时间的字段......等等,在後续如果有修改陆续会有0002、0003,里面也都是纪录新增或是修改model的内容。

简单介绍完後,紧接着我们python manage.py migrate (app名称),这个动作就是负责将上面创建的档案做执行,让model的设定能够确实地在资料库实现,还有更多migrate的说明,官方文件我也会摆在底下唷,这里补充一下这里的app名称可打可不打,如果跟我一样不打,就是专案底下所有的app的model.py都会一起应用唷。

这两个动作非常之重要,未来如果model有任何更动,切记一定要做
python manage.py makemigrations (app名称)
python manage.py migrate (app名称)

这里有官方文件,里面有对於migrate更详细的介绍唷。

今天介绍的migrate,大家在每次model不论是新增或修改後,一定要记得哦,非常之重要,明天我们接着就要进入介绍 admin.py的部分。


<<:  Day07【CSS】特异性 Specificity(样式权重)

>>:  Day 11 : psycopg2 操作

Day04 测试写起乃 - 撰写Rspec

在上一篇我们已经安装好 rspec 也产出了 User model 接下来就开始尝试写测试搂! 我在...

Day 4. 今天要干嘛?

好消息,我找到一个贴文跟一个影片,所以逛头盔这件事可以延後一点做: How to use Unity...

Day 17. 来摸摸Unreal Engine吧!

决定来摸Unreal Engine(UE)怎麽使用,经过Unity的下载後,其实Unreal的下载也...

JavaScript 语法解析器&执行环境&词汇环境 笔记

语法解析器(Syntax Parser): A program that reads your co...

DAY15 - 第四个小范例 : Line股价机器人

前言 今天是铁人赛的第十五天,终於要把前两天的爬虫程序整合到LineBot了 再次说明:这里不是手把...