走进 model [三]

2020-01-20 16:05:09 浏览数 (1)

前言

本篇将介绍Django如何建立数据库,如何创造你的第一个模型,还会接触到Django自带的后台管理系统,

数据库配置

数据库连接

打开 demo_proj/settings.py,Django 项目的配置都在此。 Python 内置了 SQLite,你无需安装就可以使用它,但当你开始一个真正的项目时,你可能更倾向使用一个更具扩展性的数据库,例如 MySQL, 在配置文件中使用 SQLite 作为默认数据库,我们的演示也用SQLite。以下就是数据库的配置项:

  • ENGINE 数据库引擎,看你是选择哪种数据库,是SQLite,或者 是MySQL,还是其他,可选值有
  • name 数据库名称,如果是 SQLite,数据库将是你电脑上的一个文件,那么, NAME 应该是此文件的绝对路径,包括文件名。默认值 os.path.join(BASE_DIR, 'db.sqlite3') 将会把数据库文件储存在项目的根目录。
创建数据库

Django是通过 migrate命令来检查 settings.py 文件中的 INSTALLED_APP 配置项,为其中的每个应用创建数据表的。 先来关注下 INSTALLED_APP配置项,我们在Django项目中所有的应用对会包括在此(上篇文章创建的 demo_app也要手动加到这配置项里)。通常 INSTALLED_APP会默认包括以下自带的应用

这些应用被默认启用是为了给项目提供方便,比如 django.contrib.admin会帮你建立个管理后台, django.contrib.auth会极大方便登录验证,等等,后续我们会陆续介绍到。这些应用都需要数据表,比如 django.contrib.admin是后台管理,那么就必须要有后台管理员。那么就要求数据库中必须有类似user表的来维护管理员数据。 Django 通过 migrate命令 根据 不同的app 来创建不同的表,执行命令

当看到 如下反馈就表示执行成功:

我们可以查看数据库,会发现多了许多的表,如图所示:

创建模型

模型是真实数据的简单明确的描述,它包含了存储的数据所必要的字段和行为。每一个模型映射一个数据库表,一般都写在 models.py中。 打开 demo_app中的models.py 文件,修改代码如下:

在Cat 类 我们定义了 __str__()方法,这个方法用来有什么作用,大家可以自己找找答案。

那我们如何把我们刚建的Cat类映射到数据表中呢?执行如下命令即可:

我们查看数据库,会发现了多了Cat这个表

这样,我们新建的模型就和数据库中的表建立起了映射关系了。那我们如何操作模型呢,也就是我们如何实现对数据库进行增删改查操作呢?Django 为我们提供了各种API,我们进入交互式Python命令行来体验下:

至此,Django如何配置数据库,如何创建model,如何把model映射到数据库中以及对model的操作我们都以熟悉了下,我们将在后面的课程中的更加深入的介绍model的一些用法。

Django 管理后台

Django 为我们提供了功能强大的后台。在后台中,我们可以利用Django自带的功能对定义的对象进行添加,修改,和删除。

创建一个管理员账号

要登录到后台,首先必须有管理员账户,运行如下命令:

启动我们的工程,在浏览器中输入 http://127.0.0.1:8000/admin/,系统会跳转到后台系统的登录页面:

输入我们刚才建立的管理员账号和密码,我们会进入到后台管理系统的索引页

我们刚才建立的Cat类在哪里呢?别急,要想在后台看到这个类还得告诉后台系统,Cat类需要被管理,打开 demo_app/admin.py 文件:

刷新页面,就可以看到我们定义的Cat类了:

点击Cat,系统就会跳转的Cat 对象的列表页面,我们刚才演示的操作API 新建的 Cat 对象也在此

点击 miaomiao 就进入到编辑页面

编辑和删除功能都能实现。

model字段类型

在介绍了上面的内容之后,我再来补充介绍下常用的Djano字段类型。

  • models.AutoField :默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
  • models.NullBooleanField :允许 NULL 作为其中一个选项。推荐使用这个字段而不要用 BooleanField 加 null=True 选项。admin 用一个选择框, <select> (三个可选择的值:“Unknown”, “Yes” 和 “No” ) 来表示这种字段数据。
  • models.Decimal:必须指定整数位max_digits和小数位decimal_places
  • models.DateField:对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。同(models.DateTimeField)

0 人点赞