编写你的第一个 Django 应用,第 2 部分
现在接着教程的第1部分继续往后面讲。我们将建立数据库,创建您的第一个模型(models),并主要关注 Django 提供的自动生成的管理页面(admin)。
1.数据库配置
现在,打开 mysite/settings.py
。这是个包含了 Django 项目设置的 Python 模块。
通常,这个配置文件使用 SQLite 作为默认数据库。如果你不熟悉数据库,或者只是想尝试下 Django,这是最简单的选择。Python 内置 SQLite,所以你无需安装额外东西来使用它。当你开始一个真正的项目时,你可能更倾向使用一个更具扩展性的数据库,例如 PostgreSQL,避免中途切换数据库这个令人头疼的问题。
对于初学者来说,最好还是先使用默认的数据库。
在默认情况下,我们的 mysite/settings.py
文件中的有关数据库的配置是这样的:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
如果你是使用的是mysql,所以,我们需要把这个地方修改一下,来使用你的数据库连接设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_polls', #可变
'USER':'root', #可变
'PASSWORD':'root', #可变
'HOST':'localhost',
'PORT':'3306',
}
}
其中,default
下面的各个选项的解释为:
ENGINE
– 代表我们使用的数据库引擎,可选值有'django.db.backends.sqlite3'
,'django.db.backends.postgresql'
,'django.db.backends.mysql'
,或'django.db.backends.oracle'
。你会发现只是需要改变的只是最右边的的数据库的名称。
NAME
数据库的名称。如果使用的是 SQLite,数据库将是你电脑上的一个文件,在这种情况下,NAME
应该是此文件的绝对路径,包括文件名。默认值os.path.join(BASE_DIR, 'db.sqlite3')
将会把数据库文件储存在项目的根目录。创建项目的时候,django已经帮你弄好了。USER
:连接数据库的用户名,也就是你之前安装mysql的时候填写的信息PASSWORD
: 连接数据库所使用的密码HOST
: 数据库所在的主机地址,默认是本地,所以是localhostPORT
: 数据库所占有的端口,也就是端口号
PS.注意大小写
编辑 mysite/settings.py
文件前,先设置 TIME_ZONE
为设置成我们中国的时区’Asia/Shanghai’
TIME_ZONE = 'Asia/Shanghai'
此外,关注一下文件头部的 INSTALLED_APPS
设置项。这里包括了会在你项目中启用的所有 Django 应用。应用能在多个项目中使用,你也可以打包并且发布应用,让别人使用它们。
通常, INSTALLED_APPS
默认包括了以下 Django 的自带应用:
django.contrib.admin
– 管理员站点, 你很快就会使用它。django.contrib.auth
– 认证授权系统。django.contrib.contenttypes
– 内容类型框架。django.contrib.sessions
– 会话框架。django.contrib.messages
– 消息框架。django.contrib.staticfiles
– 管理静态文件的框架。
这些应用被默认启用是为了给常规项目提供方便,上面也有自带的后台管理,理解一下上面django自带的应用就好,当有需要改动的话,才去弄。
默认开启的某些应用需要至少一个数据表,所以,在使用他们之前需要在数据库中创建一些表。请执行以下命令:
python manage.py migrate
运行上面这条命令的结果:
这个 migrate
命令检查 INSTALLED_APPS
设置,为其中的每个应用创建需要的数据表,至于具体会创建什么,这取决于你的 mysite/settings.py
设置文件和每个应用的数据库迁移文件。
PS.如果你不需要某些默认的应用的话,你可以在运行 migrate
前毫无顾虑地从 INSTALLED_APPS
里注释或者删除掉它们。 因为migrate只会把 INSTALLED_APPS
声明的应用进行数据库迁移。
Django 到底创建了哪些表 ,不同的数据库通过不同的命令查看
\dt
(PostgreSQL),SHOWTABLES;
(MySQL),.schema
(SQLite)SELECT TABLE_NAME FROM USER_TABLES;
(Oracle)
2.创建模型
在 Django 里写一个数据库驱动的 Web 应用的第一步是定义模型 - 也就是数据库结构设计和附加的其它元数据。
简单来说,就是设计一下数据库,数据库里面存在哪些表。
PS.只需要定义数据模型,Django 的迁移代码是由你的模型文件自动生成的
在这个简单的投票应用中,需要创建两个模型:
Question
模型包括问题描述和发布时间。Choice
模型有两个字段,选项描述和当前得票数。每个选项属于一个问题。 涉及到外键的问题
编辑 polls/models.py
文件:
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length = 200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question,on_delete = models.CASCADE)
choice_text = models.CharField(max_length = 200)
votes = models.IntegerField(default = 0)
首先要先导入那个模块,django默认帮你导入了,所以你自己不用再导入了。
每个模型被表示为 django.db.models.Model
类的子类。所以我们都要把models.Model
作为参数传进去。
每个模型有一些类变量,它们都表示模型里的一个数据库字段,通过例子来说明:
question_text = models.CharField(max_length = 200)
- question_text就是类变量,同时也代表一个数据库的字段(字段名)
- 每个字段都是
Field
类的实例 ,字符字段被表示为CharField
,日期时间字段被表示为DateTimeField
- 同时也表明每个字符要处理的数据类型
PS.你可以使用可选的选项来为 Field
定义一个人类可读的名字。这个功能在很多 Django 内部组成部分中都被使用了,而且作为文档的一部分。如果某个字段没有提供此名称,Django 将会使用对机器友好的名称,也就是变量名。
简单来说,你没有给字段一个名字的时候,django默认使用那个类变量的名字。
定义某些 Field
类实例需要参数。
CharField
需要一个 max_length
参数。
Fie