电商网站建设与运营哦,360浏览器怎么创建网页,公司专业网页制作,网站规划与网页设计在django开发中#xff0c;一般我们初始化一个项目之后#xff0c;创建应用一般就会生成如下的目录#xff1a;django-admin startproject myproject
python manage.py startapp blogmyproject/
├── manage.py
└── myproject/
| ├── __init__.py
| ├── se…在django开发中一般我们初始化一个项目之后创建应用一般就会生成如下的目录
django-admin startproject myproject
python manage.py startapp blog
myproject/
├── manage.py
└── myproject/
| ├── __init__.py
| ├── settings.py
| ├── urls.py
| └── wsgi.py
|___blog|___models.py|___......其中model.py就是定义数据库表的文件。文件中的每个类就是就对应的数据库中的每张表。比如models.py里面有如下一个类和对应的数据库中的关系如下所示
from django.db import modelsclass BlogPost(models.Model):博客文章模型类数据库中对应的表名为: blog_post (Django 自动将类名转换为小写并用下划线连接)title models.CharField(max_length200, verbose_name文章标题)# 数据库对应: VARCHAR(200) 字段NOT NULL 约束content models.TextField(verbose_name文章内容)# 数据库对应: TEXT 字段NOT NULL 约束author models.ForeignKey(auth.User,on_deletemodels.CASCADE,verbose_name作者)# 数据库对应: 外键字段关联到 auth_user 表的 id 字段# 实际存储为 author_id 整数列created_at models.DateTimeField(auto_now_addTrue, verbose_name创建时间)# 数据库对应: DATETIME 字段NOT NULL# 仅在对象首次创建时自动设置为当前时间updated_at models.DateTimeField(auto_nowTrue, verbose_name更新时间)# 数据库对应: DATETIME 字段NOT NULL# 每次保存对象时自动更新为当前时间is_published models.BooleanField(defaultFalse, verbose_name是否发布)# 数据库对应: BOOLEAN/TINYINT(1) 字段默认值为 0 (False)class Meta:verbose_name 博客文章verbose_name_plural 博客文章ordering [-created_at]# 数据库对应: 表将按 created_at 降序排列
执行python manage.py makemigrations python migrate 这里执行makemigrations的作用就在在对应的app目录下面生成migrations目录里面会有一些python文件记录了对model.py的修改。相当于git可以对models.py的每次修改做checkpoint。 举个例子。比如我在models.py里面第一次创建了数据库类执行了makemigrations命令这样就会在对应的migrations目录下面生成一个pyhton文件编号从0001_.......py开始记录这一次的改动。后来我又修改了model.py里面的一些字段的命名。执行了makemigrations命令这样就又会生成第二个0002_.......py文件。里面保存了这次对于这些字段修改的checkpoint。同时在django中这个下面生成的文件名是易读的可以从文件名大概知道改动的内容。第二个执行完makemigrations命令之后执行migrate就是把生成的哪些编号从0001开始的哪些文件的改动同步到数据库中该建表的建表。该修改字段的修改字段等等。这一步就是对数据库真正产生影响的步骤。所以这里在做数据库迁移的时候如果遇到迁移失败我们是其实可以像git一样回退迁移文件到最开始的时候也就是__inti__.py的时候然后直接重新生成迁移文件在做迁移比如上面的代码执行之后最后会在数据库中创建以下结构的表
1.表名blog_post2.字段id (自动创建的主键INTEGER PRIMARY KEY AUTOINCREMENT)title (VARCHAR(200) NOT NULL)content (TEXT NOT NULL)author_id (INTEGER NOT NULL, 外键关联到 auth_user 表)created_at (DATETIME NOT NULL)updated_at (DATETIME NOT NULL)is_published (BOOLEAN/TINYINT(1) NOT NULL, 默认 0)3.外键约束FOREIGN KEY(author_id) REFERENCES auth_user(id) ON DELETE CASCADE