一、数据库配置

此文延续第一个Django应用程序_part1

 打开mystic/settings.py。这是一个普通的Python模块,其模块变量表示Django配置
默认情况下,配置使用SQLite。如果你是数据库新手,或者你只是尝试Django,这是最简单的。SQLite包含在Python中,所以你不需要安装其它任何东西来支持你的数据库。

如果希望使用其它数据库,在DATABASE'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')。

当连接到其它数据库后端时,如Mysql,Oracle或PostagreSQL,将需要额外的连接参数。有关ENGINE如何指定其它数据库类型,请参阅下面的设置,这个例子使用于Mysql:更多信息点我查看

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数据库

import pymysql
pymysql.install_as_MySQLdb()
  • 对于SQLite以外的数据库

如果使用SQLite之外的数据库,请确保您已经创建了一个数据库。在数据库的交互式提示符中使用"CREATE DATABASE database_name';还要确保mysite/settings.py中提供的数据库用户具有"创建数据库"权限,这允许自动创建测试数据库。如果您使用的是SQLite,则无需事先创建任何内容-数据库文件将在需要时自动创建。

当您编辑mysite/settings.py时,将TIME_ZONE设置为您的时区。

另外,请注意文件INSTALLED_APPS的头部设置,它包含在此Django项目中激活的所有Django应用程序的名称。应用程序可以在多个项目中使用,您可以将其打包分发给其它项目。

默认情况下,INSTALLED_APPS包含以下应用程序,所以这些应用程序都附带在Django中:

  • django.contrib.admin        网站管理。
  • django.contrib.auth          一个认证系统。
  • django.contrib.contenttypes      内容类型的框架。
  • django.contrib.sessions             会话框架。
  • django.contrib.message          消息传递框架。
  • django.contrib.staticfiles         一个管理静态文件的框架。

其中一些应用程序至少需要一个数据库表,因此我们需要在数据库中创建表,然后才能使用它们,请运行以下命令:

python3 manage.py migrate

migrate命令用来查看INSTALLED_APPS设置,并根据mysite/settings.py文件中的数据库设置创建所有需要的数据库表,应用程序还需要数据库迁移。

二、创建model

在我们的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=)
pub_date = models.DateTimeField('date published') class Chocie(models.Model):
question = models.ForeignKey(Question,on_delete=models.CASCADE)
choice_text = models.CharField(max_length=)
votes = models.IntegerField(default=)

每个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支持所有常见的数据关系:多对一,多对多和一一对应。

三、激活Model

模型代码给了Django很多信息,有了它,Django能够:

  • 为此应用程序创建数据库模式(CREATE TABLE语句)。
  • 创建一个Python数据库访问API,用于访问question和Choice对象。

但首先我们需要告诉我们的项目,安装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 

你应该看到类似以下内容:

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;

请注意以下几点:

  • 确切的输出将取决于您使用的数据库,上面的例子是Mysql生成的。
  • 表名是通过组合应用程序的名称(自动生成polls)和模型的小写名字-question和choice。(您可以覆盖此行为。)
  • 主键(ID)会自动添加。(你也可以覆盖它。)
  • 按照惯例,Django追加"_id"到外键字段名称。(你也可以重写这个。)
  • 外键关系由FOREIGN KEY限制。不要担心DEFERRABLE部分;这只是告诉Mysql不执行外键直到事物结束。
  • 它适合您使用的数据库,因此数据库特定的字段类型,如auto_increment(MySQL),serial(PostgreSQL)或integer主要建

自增量(SQLite)将自动为您处理。引用字段名称也是如此,例如使用引号双引号或单引号。

  • sqlmigrate命令实际上不会在数据库上运行迁移-他只是将其打印到屏幕上,以便您可以看到Django认为需要执行的SQL语句。检查Django要执行的操作或者

是否有需要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的数据库中的特殊表来跟踪哪些迁移)并根据您的数据库运行它们-基本上将您对模型所做

的更改与数据库中的模式进行同步。

迁移非常强大,随着时间的推移,您可以随时更改模型,而无需删除数据库或表并创建新的数据库-他专门用于实时升级数据库,而不会丢失数据。

进行模型更改的三步指南:

  • 改变你的模型(models.py)
  • 运行以为这些更改创建迁移python manage.py makeigrations。
  • 运行以将这些更改应用于数据库。pyhton manage.py migrate。

四、介绍Django Admin

创建管理员用户

创建一个登录管理站点的用户。运行以下命令:

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/

进入管理员页面

输入上面创建的账号及密码登录

在admin中修改polls应用

我们需要告诉管理员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?"问题编辑它

注意事项:

  • 表单是从Question模型自动生成的。
  • 不同的模型字段类型(DateTimeField,CharField)对应于适当的HTML输入小部件。每种类型的字段指导如何在Django管理功能中显示自己。
  • 每个DateTimeField可以获得灵活的JavaScript事件记录。日期获得"今日"快捷方式和日历弹出窗口,时间获取“现在”快捷方式和一个方便的弹出窗口,列出常用的时间。

页面底部提供了几个选项:

  • Save :保存更改并返回到此类型对象的更改列表页面。
  • Save and continue editing :保存更改并重新加载此对象的管理页面。
  • Save and add another :保存更改并加载此类型对象的新空白表单。
  • Delete:显示删除确认页面

如果"Date published"的值与Tutorial 1中创建问题的时间不匹配,则可能意味着你忘记为TIME_ZONE设置正确的值。

更改它,重新加载页面,并检查确认页面。

点击"Today"和"Now"快捷方式更改"Date published'。然后点击“Save and continue editing”。然后点击右上角的"History"。你将看到一个页面,其中列出了

通过Django管理员对此对象所做所有更改,以及进行更改的人员的时间戳和用户名:

第一个Django应用程序_part2的更多相关文章

  1. 搭建你的第一个Django应用程序

    首先你要确保你机器上面安装了python:Python开发_python的安装 python的相关学习资料:http://www.cnblogs.com/hongten/tag/python/ 其次, ...

  2. Django教程:第一个Django应用程序(4)

    Django教程:第一个Django应用程序(4) 2013-10-09 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 #博客: ...

  3. Django教程:第一个Django应用程序(3)

    Django教程:第一个Django应用程序(3) 2013-10-08 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 #博客: ...

  4. 第一个Django应用程序_part3

    一.概述 此文延续第一个Django应用程序part2. 官方文档:https://docs.djangoproject.com/en/1.11/intro/tutorial03/ view是Djan ...

  5. 第一个Django应用程序_part1

    一.查看Django是否安装 参考文档:https://docs.djangoproject.com/en/1.11/intro/tutorial01/ 如果Django已经安装,可以看到安装的版本号 ...

  6. 编写你的第一个django应用程序2

    从1停止的地方开始,我们将设置数据库,创建您的第一个模型,并快速介绍django自动生成的管理站点 数据库设置 现在,打开mysite/settings.py.这是一个普通的python模块,其中模块 ...

  7. 编写你的第一个django应用程序4

    本教程上接教程3,我们将继续开发网页投票应用,本部分将主要关注简单的表单处理以及如何对代码进行优化 写一个简单的表单 让我们更新一下在上一个教程中编写的投票详细页面的模板(‘polls/detail. ...

  8. 编写你的第一个django应用程序3

    这一篇从教程第2部分结尾的地方继续讲起.我们将继续编写投票应用,并且专注于如何创建公用界面--也被称为视图 概况 django视图概念是一类具有相同功能和末班的网页的集合,比如,在一个博客应用中,你可 ...

  9. Pycharm+Django搭建第一个Python Web程序

    1.安装django 无论是Python2.x还是Python3.x版本,都可以使用pip来安装Django.在控制台使用如下命令:pip install django 如: 2.检查dgango是否 ...

随机推荐

  1. display的flex属性使用详解

    flex的兼容性在pc端还算阔以,但是在移动端,那就呵呵了.今天我们只是学习学习,忽略一些不重要的东西. 首先flex的使用需要有一个父容器,父容器中有几个items. 父容器:container 属 ...

  2. 利用Instrument Leak来发现App中的内存泄露

    XCode提供了一组用于检测内存,调试动画,布局等的工具.对于调试一些性能问题,内存问题非常方便.这里我们使用Leak来发现代码中的内存泄露. 在Leak中启动我们的应用开始监控: 注意,在监控的时候 ...

  3. MFC消息循环

    MFC消息循环 MFC应用程序中处理消息的顺序 1.AfxWndProc()  该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc. 2.AfxCallWndProc ...

  4. CentOS下搭建.NET Core项目运行环境

    系统版本:CentOS 7.3 运行环境:.NET Core 数据库:MySQL 进程守护:Supervisor .NET Core环境 安装CentOS中.NET Core依赖库 yum insta ...

  5. JDK bin指令

    jmap: 一.调用命令示例: jmap -F-dump:format=b,file=rmsheap.bin 6086 就会在当前目录下生成rmsheap.bin的文件,6086是Pid.-F是在某些 ...

  6. js手机号正则表达式验证

    var phone = $("#phone").val(); //陈旧版 var parphone = /^(((13[0-9]{1})|(17[0-9]{1})|(15[0-9] ...

  7. 第三章:Hadoop简介及配置Hadoop-1.2.1,hbase-0.94.13集群

    前面给大家讲了怎么安装Hadoop,肯定会有人还是很迷茫,装完以后原来就是这个样子,但是怎么用,下面,先给大家讲下Hadoop简介:大致理解下就OK了 hadoop是一个平台,提供了庞大的存储和并行计 ...

  8. iframe显示跨域url页面

    可以通过JS搞定跨域问题,但是比较麻烦,我就在后台处理了,其实这样本质上也算不上是跨域了 后台otherwebsite.php: <?php $url="www.otherwebsit ...

  9. SQLSERVER出错提示:此上下文中不允许使用''。此处只允许使用常量、表达式或变量。不允许使用列名。

    在执行一段SQL语句时出现了这样的一段错误提示,在网上找了不少答案,都说的不是很详细,反复修改试验,最终解决了此问题.原SQl语句为: insert into shoufei(djbh,sflb,jk ...

  10. video2gift环境安装(Theano等)

    pip install Theano http://deeplearning.net/software/theano/install_centos6.html pip install moviepy ...