Django|Django 编写第一个Django应用,第2部分

Django 官方文档

文章目录

    • Django
      • 5. 编写一个Django应用,第2部分
        • 5.1 数据库配置
          • 5.1.1 安装MySQL数据库API驱动程序
          • 5.1.2 修改settings.py文件
        • 5.2 设置时区(看文末 )
        • 5.3 INSTALLED_APPS 设置项
        • 5.4 创建一些表
        • 5.5 创建模型
        • 5.6 激活模型
        • 5.7 初试API
        • 5.8 介绍Django管理界面
          • 5.8.1 创建一个管理员账号
          • 5.8.2 启动服务器
          • 5.8.3 进入管理站点页面
          • 5.8.4 向管理页面中加入投票应用
          • 5.8.5 体验便捷的管理功能
        • 5.9 时区设置

5. 编写一个Django应用,第2部分
5.1 数据库配置 mysite/settings.py 。这是个包含了 Django 项目设置的 Python 模块。
Django|Django 编写第一个Django应用,第2部分
文章图片

通常,这个配置文件使用 SQLite 作为默认数据库。如果开发者不熟悉数据库,或者只是想尝试下 Django,这是最简单的选择。Python 内置 SQLite,所以无需安装额外东西来使用它。
5.1.1 安装MySQL数据库API驱动程序
pip install mysqlclient

Django|Django 编写第一个Django应用,第2部分
文章图片

5.1.2 修改settings.py文件
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 驱动 'HOST':'127.0.0.1', #主机地址 'PORT':'3306',# 端口号 'NAME':'django',# 数据库名 'USER':'root',# 登录用户名 'PASSWORD':'200039',#登录密码 "OPTIONS":{ 'init_command':"SET sql_mode='STRICT_TRANS_TABLES'", # 防止数据丢失 }, # 'NAME': BASE_DIR / 'db.sqlite3', } }

5.2 设置时区(看文末 ) Django|Django 编写第一个Django应用,第2部分
文章图片

Windows系统设置不起作用,Django会使用本机的时间。
5.3 INSTALLED_APPS 设置项 包括了项目中启用的所有 Django 应用。
INSTALLED_APPS = [ 'django.contrib.admin', # 管理员站点 'django.contrib.auth', # 认证授权系统 'django.contrib.contenttypes', #内容类型框架 'django.contrib.sessions', # 会话框架 'django.contrib.messages', # 消息框架 'django.contrib.staticfiles', # 管理静态文件的框架 ]

5.4 创建一些表
python manage.py migrate

Django|Django 编写第一个Django应用,第2部分
文章图片

Django|Django 编写第一个Django应用,第2部分
文章图片

Django自动创建的表“们”
5.5 创建模型 数据库结构设计和附加的其它元数据。
在这个投票应用中,需要创建两个模型:问题 Question 和选项 ChoiceQuestion 模型包括问题描述和发布时间。Choice 模型有两个字段,选项描述和当前得票数。每个选项属于一个问题。
polls/models.py
from django.db import models# Create your models here.class Question(models.Model):# 继承Model类 # 每个模型有许多类变量,它们都表示模型里的一个数据库字段 # 每个字段都是Field类的实例 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) # 设置默认值

5.6 激活模型 首先把 polls 应用安装到项目里。
Django|Django 编写第一个Django应用,第2部分
文章图片

运行命令
python manage.py makemigrations polls

Django|Django 编写第一个Django应用,第2部分
文章图片

通过运行 makemigrations 命令,Django 会检测对模型文件的修改,并且把修改的部分储存为一次迁移。
迁移是 Django 对于模型定义(也就是你的数据库结构)的变化的储存形式 - 它们其实也只是一些磁盘上的文件。
Django|Django 编写第一个Django应用,第2部分
文章图片

Django 有一个自动执行数据库迁移并同步管理你的数据库结构的命令 —— migrate
首先,让我们看看迁移命令会执行哪些 SQL 语句。sqlmigrate 命令接收一个迁移的名称,然后返回对应的 SQL
py manage.py sqlmigrate polls 0001

Django|Django 编写第一个Django应用,第2部分
文章图片

【注意】
  • 输出的内容和开发者使用的数据库有关,上面的输出示例笔者使用的是 MySQL。
  • 数据库的表名是由应用名(polls)和模型名的小写形式( questionchoice)连接而来。(可自定义)
  • 主键(IDs)会被自动创建。(可自定义)
  • 默认的,Django 会在外键字段名后追加字符串 "_id" 。(可自定义)
  • 外键关系由 FOREIGN KEY 生成。
  • 生成的 SQL 语句是为所用的数据库定制的,所以那些和数据库有关的字段类型,比如 auto_increment (MySQL)、 serial (PostgreSQL)和 integer primary key autoincrement (SQLite),Django 会自动处理。那些和引号相关的事情 - 例如,是使用单引号还是双引号 - 也一样会被自动处理。
  • 这个 sqlmigrate 命令并没有真正在你的数据库中的执行迁移 - 相反,它只是把命令输出到屏幕上,让你看看 Django 认为需要执行哪些 SQL 语句。
→ 真正创建
py manage.py migrate

Django|Django 编写第一个Django应用,第2部分
文章图片

Django|Django 编写第一个Django应用,第2部分
文章图片

Django|Django 编写第一个Django应用,第2部分
文章图片

这个 migrate 命令选中所有还没有执行过的迁移(Django 通过在数据库中创建一个特殊的表 django_migrations 来跟踪执行过哪些迁移)并应用在数据库上 - 也就是将你对模型的更改同步到数据库结构上。
改变模型的三步
  1. 编辑 models.py 文件,改变模型。
  2. 运行 python manage.py makemigrations 为模型的改变生成迁移文件。
  3. 运行 python manage.py migrate 来应用数据库迁移。
5.7 初试API 进入交互式Python命令行
py manage.py shell

Django|Django 编写第一个Django应用,第2部分
文章图片

Django|Django 编写第一个Django应用,第2部分
文章图片

查询时输出对象细节
Django|Django 编写第一个Django应用,第2部分
文章图片

添加自定义方法
Django|Django 编写第一个Django应用,第2部分
文章图片

再次进入命令行
查询所有
Django|Django 编写第一个Django应用,第2部分
文章图片

条件查询
  • id为1
    Django|Django 编写第一个Django应用,第2部分
    文章图片

  • 问题文本
    Django|Django 编写第一个Django应用,第2部分
    文章图片

  • 自定义条件
    Django|Django 编写第一个Django应用,第2部分
    文章图片

查询不存在的
Django|Django 编写第一个Django应用,第2部分
文章图片

主键查找
Django|Django 编写第一个Django应用,第2部分
文章图片

显示于问题有关的回答集合
Django|Django 编写第一个Django应用,第2部分
文章图片

现在还没有回答
创建回答
Django|Django 编写第一个Django应用,第2部分
文章图片

再次查询所有相关回答以及个数
Django|Django 编写第一个Django应用,第2部分
文章图片

对回答进行条件查询
Django|Django 编写第一个Django应用,第2部分
文章图片

删除指定回答
Django|Django 编写第一个Django应用,第2部分
文章图片

5.8 介绍Django管理界面 5.8.1 创建一个管理员账号
py manage.py createsuperuser

Django|Django 编写第一个Django应用,第2部分
文章图片

5.8.2 启动服务器 Django|Django 编写第一个Django应用,第2部分
文章图片

访问http://127.0.0.1:8000/admin/
Django|Django 编写第一个Django应用,第2部分
文章图片

5.8.3 进入管理站点页面 使用管理员账号登录
Django|Django 编写第一个Django应用,第2部分
文章图片

5.8.4 向管理页面中加入投票应用 Django|Django 编写第一个Django应用,第2部分
文章图片

Django|Django 编写第一个Django应用,第2部分
文章图片

5.8.5 体验便捷的管理功能 【Django|Django 编写第一个Django应用,第2部分】Django|Django 编写第一个Django应用,第2部分
文章图片

编辑问题
Django|Django 编写第一个Django应用,第2部分
文章图片

【注意】
  • 这个表单是从问题 Question 模型中自动生成的
  • 不同的字段类型(日期时间字段 DateTimeField 、字符字段 CharField)会生成对应的 HTML 输入控件。每个类型的字段都知道它们该如何在管理页面里显示自己。
  • 每个日期时间字段 DateTimeField 都有 JavaScript 写的快捷按钮。日期有转到今天(Today)的快捷按钮和一个弹出式日历界面。时间有设为现在(Now)的快捷按钮和一个列出常用时间的方便的弹出式列表。
页面底部选项
  • 保存(Save) - 保存改变,然后返回对象列表。
  • 保存并继续编辑(Save and continue editing) - 保存改变,然后重新载入当前对象的修改界面。
  • 保存并新增(Save and add another) - 保存改变,然后添加一个新的空对象并载入修改界面。
  • 删除(Delete) - 显示一个确认删除页面。
Django|Django 编写第一个Django应用,第2部分
文章图片

Django|Django 编写第一个Django应用,第2部分
文章图片

5.9 时区设置 Django|Django 编写第一个Django应用,第2部分
文章图片

更改文件后,服务器自动重新运行了
Django|Django 编写第一个Django应用,第2部分
文章图片

现在时间正确了

    推荐阅读