目录
创建模型
-
第一、数据库配置
打开
mysite/settings.py
。这是个包含了 Django 项目设置的 Python 模块。通常,这个配置文件使用 SQLite 作为默认数据库。如果你不熟悉数据库,或者只是想尝试下 Django,这是最简单的选择。Python 内置 SQLite,所以你无需安装额外东西来使用它。但是我们在正规的企业的里都不会使用SQLite做数据库,所以我们就要改变配置。连接外部数据库,比如MySQL,在往下的学习中我们都会以mysql作为数据库。
关于MySQL数据库的配置(其他数据库配置可看django文档编写你的第一个 Django 应用,第 2 部分 | Django 文档 | Django)
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'apaclass', 'USER':'root', 'PASSWORD':'phh626313', 'HOST':'127.0.0.1', 'PORT':'3306' } }
改完以后会出现一个报错:
-
第二、执行
-
python manage.py migrate 用来做数据库迁移,这里会自动生成相关表(可选项)
-
发现报错以后不要按照提示下载‘mysqlclient’,因为这是一个比较老的库,所以可以下载pymysql
pip install pymysql
然后再全局的mysite __init__.py文件当中写入一下代码,使用mysql,代替全局的mysqlclient
import pymysql pymysql.install_as_MySQLdb()
-
提示:有的同志在做到这一步还会报错,有一种可能就是在数据库里没有你所修改的配置中的NAME,也就是没有这个数据库,所以要新建与你配置名字相同的数据库。
所以可以做以下步骤:
-
第一、建数据库
-
第二、执行:python manage.py migrate 用来做数据库迁移,这里会自动生成相关表(可选项)
-
-
第二、创建模型
这个简单的投票应用中,需要创建两个模型:问题
Question
和选项Choice
。Question
模型包括问题描述和发布时间。Choice
模型有两个字段,选项描述和当前得票数。每个选项属于一个问题。api01\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)
每个字段都是 Field 类的实例 - 比如,字符字段被表示为 CharField ,日期时间字段被表示为 DateTimeField 。这将告诉 Django 每个字段要处理的数据类型。
每个 Field 类实例变量的名字(例如
question_text
或pub_date
)也是字段名,所以最好使用对机器友好的格式。你将会在 Python 代码里使用它们,而数据库会将它们作为列名。你可以使用可选的选项来为 Field 定义一个人类可读的名字。这个功能在很多 Django 内部组成部分中都被使用了,而且作为文档的一部分。如果某个字段没有提供此名称,Django 将会使用对机器友好的名称,也就是变量名。在上面的例子中,我们只为
Question.pub_date
定义了对人类友好的名字。对于模型内的其它字段,它们的机器友好名也会被作为人类友好名使用。定义某些 Field 类实例需要参数。例如 CharField 需要一个 max_length 参数。这个参数的用处不止于用来定义数据库结构,也用于验证数据,我们稍后将会看到这方面的内容。
Field 也能够接收多个可选参数;在上面的例子中:我们将
votes
的 default 也就是默认值,设为0。注意在最后,我们使用 ForeignKey 定义了一个关系。这将告诉 Django,每个
Choice
对象都关联到一个Question
对象。Django 支持所有常用的数据库关系:多对一、多对多和一对一。
-
激活模型
-
为这个应用创建数据库 schema(生成
CREATE TABLE
语句)。 -
创建可以与
Question
和Choice
对象进行交互的 Python 数据库 API。
为了在我们的工程中包含这个应用,我们需要在配置类 INSTALLED_APPS 中添加设置。api01.apps.Api01Config,将其注册到项目中。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'api01.apps.Api01Config' ]
现在可以执行以下几个命令:
下边命令的作用 :创建进程,类似于git
python manage.py makemigrations api01
-
-
python manage.py migrate
-
从上图就可以看出,数据库已经完全建好。其中api01_choice和api01_question就是我们所在models.py当建的表。
-
答疑:我们所在models中写的代码是数据库代码的对应是什么 ?
EGIN; -- -- Create model Choice -- CREATE TABLE "polls_choice" ( "id" serial NOT NULL PRIMARY KEY, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL ); -- -- Create model Question -- CREATE TABLE "polls_question" ( "id" serial NOT NULL PRIMARY KEY, "question_text" varchar(200) NOT NULL, "pub_date" timestamp with time zone NOT NULL ); -- -- Add field question to choice -- ALTER TABLE "polls_choice" ADD COLUMN "question_id" integer NOT NULL; ALTER TABLE "polls_choice" ALTER COLUMN "question_id" DROP DEFAULT; CREATE INDEX "polls_choice_7aa0f6ee" ON "polls_choice" ("question_id"); ALTER TABLE "polls_choice" ADD CONSTRAINT "polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id" FOREIGN KEY ("question_id") REFERENCES "polls_question" ("id") DEFERRABLE INITIALLY DEFERRED; COMMIT;
所以相比之下我们发现models的数据库创建的语法还是比较简单快捷的。
管理后台
-
创建一个管理员账号
python manage.py createsuperuser
-
启动开发服务器
python manage.py runserver
到admin目录下,可以看到管理后台。
如果未出现admin路由,则要检查全局下的urls路由分发
-
-
向管理页面中加入投票应用
api01/admin.py
from django.contrib import admin # Register your models here. from .models import Question from .models import Choice admin.site.register(Question)
-
现在我们就可以用这个后台的Quetions了
需要掌握
-
掌握视图,模型,后台