应用创建与数据库初始化
从这个小节开始,就会带大家一步步搭建一个简单的 Django 博客项目出来。整个项目大概有如下功能:用户注册/登录,发布文章,查看文章。在实现这些功能的过程中,会逐一介绍 Django 框架的基本特点与使用。
应用创建
首先,用 VSCode 打开之前创建好的hello
项目。Django 这个框架是依托于应用的,一个 Django 项目是一个个应用所构成的。这里使用下面的命令创建第一个应用:
python manage.py startapp user
可以看到项目的根目录下多了一个user
文件夹:
这就是刚刚创建好的应用,之后会在这个应用中实现用户模块。
连接数据库
用之前介绍的 Datagrip,先连接上本项目的数据库。打开 Datagrip,选择数据源->Sqlite:
名称随便填写,然后选中项目中的那个 sqlite 文件:
然后就可以在左侧看到数据库了:
下一步就是创建数据库表。
建表
这里默认大家已经掌握基本的数据库知识(主键,外键等)。
打开user/models.py
,然后将其修改为如下内容:
from django.db import models
# Create your models here.
class User(models.Model):
id = models.AutoField(primary_key=True)
username = models.CharField(max_length=20)
password = models.CharField(max_length=50)
email = models.EmailField(null=True, blank=True)
post = models.IntegerField(default=0)
User
就是我们新建的一个数据库表,同时它也是 Python 中的一个类。这个类中的每一个属性,都会对应表中的每一列。首先定义id
为主键,其类型为AutoField
,表示我们在初始化这个类时,不需要显式为其赋值,Django 会自动计算它的值。比如数据库中已经有了 3 个用户,在新建第四个用户时,id
会被自动置为4。
然后是每个用户必备的用户名与密码类,通常这两个属性都不会很长,使用CharField
类型储存,并设置最大长度。用户在注册时可以选择提供邮箱,存放于EmailField
,也就是邮箱类中。考虑到可能有缺失的情况,所以允许这一个属性为空。最后一个post
来记录这个用户一共发表了多少篇博客,其类型是整形IntegerField
。在初始化时如果未被给出,则赋一个默认值 0 进去。
因为刚刚对数据库做了修改,我们需要将这些修改迁移进去。在命令行中输入以下两条命令:
python manage.py makemigrations
python manage.py migrate
发现没有反应。因为新建的应用没有写入到项目设置中。打开hello/settings.py
,在这里把user
这个应用写入:
然后再执行上面的命令:
Django 就会识别刚刚建好的表,并且把每个属性的信息写入。在 Datagrip 中刷新下对应的数据库,就可以在其中看到刚刚建好的表了:
注:
user_user
是默认的应用名_表名的格式,并不是写法有问题。
到这里一个新的应用的初始化过程就已经结束了。相关代码已经提交到了 Github 的示例项目上,最后一次 commit 的注释为“Finish APP Create”。
注意事项
有关数据库的一切操作都要慎重。一个项目通常会在需求都非常明确之后,才确定要建哪些表、表之间有什么关系、表中都有哪些属性。如果需求不明确就随意建表,很容易在后期发现字段不够用,字段没用上,表太大过于臃肿需要拆分等情况,这时候再对表进行修改会麻烦很多。例如要在一个已有的表中加入一个新的字段,且这个表里已经有一部分数据的话,就需要允许这个新字段为空,或者指定默认值,不然加不进去。
这些对表的操作一个不慎就会产生很多脏数据,干扰正常的增删改查,最后只能删库处理。所以在建表时一定要慎重,少用外键(因为初学者再怎么被强调,自己上手开发或多或少都得改个十几次表,少用外键可以避免出现问题)。
参考资料
Django 支持的字段类型有很多,这里只对用到的类型做了简单介绍。如果有别的需求,可以查阅官方文档-模型字段参考。