此文延续第一个Django应用程序_part1。html
打开mystic/settings.py。这是一个普通的Python模块,其模块变量表示Django配置 默认状况下,配置使用SQLite。若是你是数据库新手,或者你只是尝试Django,这是最简单的。SQLite包含在Python中,因此你不须要安装其它任何东西来支持你的数据库。
若是但愿使用其它数据库,在DATABASE'default'项目中修改如下的配置,以匹配你的数据库链接设置:python
项目目录中。os.path.join(BASE_DIR, 'db.sqlite3')。mysql
当链接到其它数据库后端时,如Mysql,Oracle或PostagreSQL,将须要额外的链接参数。有关ENGINE如何指定其它数据库类型,请参阅下面的设置,这个例子使用于Mysql:更多信息点我查看sql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysite',
'USER': 'root',
'PASSWORD': '123',
'HOST': '192.168.56.31',
'PORT': '3306',
}
}
在和settings.py同级的__init__.py文件中添加以下内容:数据库
告诉Django使用pymysql连接mysql数据库django
import pymysql pymysql.install_as_MySQLdb()
若是使用SQLite以外的数据库,请确保您已经建立了一个数据库。在数据库的交互式提示符中使用"CREATE DATABASE database_name';还要确保mysite/settings.py中提供的数据库用户具备"建立数据库"权限,这容许自动建立测试数据库。若是您使用的是SQLite,则无需事先建立任何内容-数据库文件将在须要时自动建立。后端
当您编辑mysite/settings.py时,将TIME_ZONE设置为您的时区。浏览器
另外,请注意文件INSTALLED_APPS的头部设置,它包含在此Django项目中激活的全部Django应用程序的名称。应用程序能够在多个项目中使用,您能够将其打包分发给其它项目。服务器
默认状况下,INSTALLED_APPS包含如下应用程序,因此这些应用程序都附带在Django中:session
其中一些应用程序至少须要一个数据库表,所以咱们须要在数据库中建立表,而后才能使用它们,请运行如下命令:
python3 manage.py migrate
migrate命令用来查看INSTALLED_APPS设置,并根据mysite/settings.py文件中的数据库设置建立全部须要的数据库表,应用程序还须要数据库迁移。
在咱们的polls应用程序中,咱们将建立两个模型:Question和Choice。Question有question和publication date两个字段。Choice有两个字段:choice text和vote tally。每一个
Chocie与Question对应。
编辑polls/models.py文件,以下所示:
from django.db import models # Create your models here. class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Chocie(models.Model): question = models.ForeignKey(Question,on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
每一个Model有一个类django.db.models.Model的类表示。每一个Model都有一个变量,每一个变量都表示模型中的数据库字段。
每一个字段由字段类的实例表示,例如字符字段的CharField和数据时间的DateTimeField。这告诉Django每一个字段拥有什么类型的数据。
每一个Field实例(例如question_text或pub_date)是该字段的名称,以机器友好的格式。您将在您的Python代码中使用此值,而且您的数据库将使用它做为列名称。
您可使用可选的第一个位置参数Field来指定一我的类可读的名称。在Django的一些内省部分使用,它能够做为文档。若是未提供此字段,Django
将使用机器可读的名称。在这个例子中,咱们只为Question.pub_date定义了一个可读的名字。对于该模型中的全部其它字段,该字段的机器可读名称将足以做为其可读的名称。
一些字段类具备必须的参数。例如,CharField要求您给它一个max_length。这不只在数据库模式中使用,并且用于验证。
最后,请注意使用ForeignKey定义关系。这告诉Django每一个Chocie与Question对应。Django支持全部常见的数据关系:多对一,多对多和一一对应。
模型代码给了Django不少信息,有了它,Django可以:
但首先咱们须要告诉咱们的项目,安装polls应用程序。
提示:Django应用程序是“可插拔的”:您能够在多个项目中使用应用程序,您能够分发应用程序,由于它们没必要与给定的Django安装绑定。
要将该应用程序包含在咱们的项目中,咱们须要在设置中添加对其配置类的应用INSTALLED_APPS。PollsConfig类是在polls/apps.py文件中,所以其“点路径”
为"polls.apps.PollConfig"。编辑mysite/settings.py文件,并将"点路径"添加到INSTALLED_APPS设置中。
INSTALLED_APPS = [ 'polls.apps.PollsConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
如今Django知道包含polls应用程序。咱们运行另外一个命令:
python3 manage.py makemigrations polls
你应该看到相似如下内容:
Migrations for 'polls': polls/migrations/0001_initial.py - Create model Chocie - Create model Question - Add field question to chocie
经过运行makemigrations,你能够告诉Django您对模型进行了一些更改(在这种状况下,您已经建立了新的模型)。而且但愿将更改存储为迁移。
迁移是Django如何存储对模型(以及数据库模式)的更改-它们只是磁盘上的文件。它是文件polls/migrations/001_initial.py。
有一个命令能够为您运行迁移并自动管理数据库模式-这就是migrate。sqlmigrate命令接受迁移名称并返回其SQL:
python3 manage.py sqlmigrate polls 0001
你应该看到相似如下内容:
BEGIN;
--
-- Create model Chocie
--
CREATE TABLE `polls_chocie` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `choice_text` varchar(200) NOT NULL, `votes` integer NOT NULL);
--
-- Create model Question
--
CREATE TABLE `polls_question` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `question_text` varchar(200) NOT NULL, `pub_date` datetime(6) NOT NULL);
--
-- Add field question to chocie
--
ALTER TABLE `polls_chocie` ADD COLUMN `question_id` integer NOT NULL;
ALTER TABLE `polls_chocie` ADD CONSTRAINT `polls_chocie_question_id_9c0a43fe_fk_polls_question_id` FOREIGN KEY (`question_id`) REFERENCES `polls_question` (`id`);
COMMIT;
请注意如下几点:
自增量(SQLite)将自动为您处理。引用字段名称也是如此,例如使用引号双引号或单引号。
是否有须要SQL脚本进行更改的数据库,而不进行迁移或操做数据库。
如今,再次运行migrate以在数据库中建立这些模型表:
python3 manage.py migrate
你会看到如下相似信息:
Operations to perform: Apply all migrations: admin, auth, contenttypes, polls, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying polls.0001_initial... OK Applying sessions.0001_initial... OK
migrate命令接受全部未应用的迁移(Django使用名为django_mirgrations的数据库中的特殊表来跟踪哪些迁移)并根据您的数据库运行它们-基本上将您对模型所作
的更改与数据库中的模式进行同步。
迁移很是强大,随着时间的推移,您能够随时更改模型,而无需删除数据库或表并建立新的数据库-他专门用于实时升级数据库,而不会丢失数据。
进行模型更改的三步指南:
建立一个登陆管理站点的用户。运行如下命令:
python3 manage.py createsuperuser
输入所需的用户名,而后按Enter键。
Username (leave blank to use 'h'): admin
而后根据提示输入所需的电子邮件地址:
Email address: admin@example.com
最后一步是输入你的密码。你将被要求输入密码两次,第二次做为第一次的确认。
Password: Password (again): Superuser created successfully.
默认状况下,Django管理员站点被激活。
若是服务器没有启动就运行如下命令:
python manage.py runserver
打开浏览器,而后转到本地域的“/admin/” 例如:http://127.0.0.1:8000/admin/
输入上面建立的帐号及密码登陆
咱们须要告诉管理员Question对象有一个管理员界面。所以,打开polls/admin.py文件,而后将其编辑为以下所示:
from django.contrib import admin # Register your models here. from .models import Question admin.site.register(Question)
如今咱们注册了Question项目,Django知道应该显示在管理员索引页面上。
点击“POLLS”下的add 输入以下图所示信息:时间选择今天、如今,而后点击save--点击Home
点击“Question”。如今您在“更改列表”页面寻找问题。此页面显示数据库中的全部问题,并让您选择一个来更改它。咱们以前建立的“What's up?”
点击"What's up?"问题编辑它
注意事项:
页面底部提供了几个选项:
若是"Date published"的值与Tutorial 1中建立问题的时间不匹配,则可能意味着你忘记为TIME_ZONE设置正确的值。
更改它,从新加载页面,并检查确认页面。
点击"Today"和"Now"快捷方式更改"Date published'。而后点击“Save and continue editing”。而后点击右上角的"History"。你将看到一个页面,其中列出了
经过Django管理员对此对象所作全部更改,以及进行更改的人员的时间戳和用户名: