Django 3.0 文档笔记——数据库与模型 tutorial 02

Django3.0快速入门02

https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial02/

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

数据库配置

打开 settings.py 这是关于项目的配置文件,通常,这个配置文件使用 SQLite 作为默认数据库

我们可以找到数据库的配置,引擎(ENGINE)为sqlite,文件名称(NAME)为如下,可以在目录中找到该文件

Django 3.0 文档笔记——数据库与模型 tutorial 02_第1张图片

同时settings中的 INSTALLED_APPS 部分包括了会在你项目中启用的所有 Django 应用

Django 3.0 文档笔记——数据库与模型 tutorial 02_第2张图片

通常, INSTALLED_APPS 默认包括了以下 Django 的自带应用:

django.contrib.admin -- 管理员站点, 你很快就会使用它。
django.contrib.auth -- 认证授权系统。
django.contrib.contenttypes -- 内容类型框架。
django.contrib.sessions -- 会话框架。
django.contrib.messages -- 消息框架。
django.contrib.staticfiles -- 管理静态文件的框架

命令行中执行

py manage.py migrate

即将应用中的表迁移到数据库(更新数据库表格)

创建模型

在 Django 里写一个数据库驱动的 Web 应用的第一步是定义模型 - 也就是数据库结构设计和附加的其它元数据。

在我们的投票应用程序中,我们将创建两个模型:问题和选择。一个问题有一个问题和一个发布日期。一个选择有两个字段:选择的文本和投票计数。每个选择都与一个问题相关。

这些概念都由Python类表示

编辑  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 Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

每个模型都是 django.db.models.Model的子类

每个字段都是 Field 类的实例 - 
比如,字符字段被表示为 CharField ,日期时间字段被表示为 DateTimeField 。
这将告诉 Django 每个字段要处理的数据类型。

此外 ForeignKey 定义了了一个外键,与问题链接,需要两个位置参数:被关联的类和 on_delete 选项

on_delete=models.CASCADE 表示删除问题时,该选项也联级删除

激活模型

添加INSTALLED_APPS

因为 PollsConfig 类写在文件 polls/apps.py 中,所以它的点式路径是 'polls.apps.PollsConfig' 在settings.py中添加

Django 3.0 文档笔记——数据库与模型 tutorial 02_第3张图片

执行以下命令行

py manage.py makemigrations polls
py manage.py migrate
现在,你只需要记住,改变模型需要这三步:

编辑 models.py 文件,改变模型。
运行 python manage.py makemigrations 为模型的改变生成迁移文件。
运行 python manage.py migrate 来应用数据库迁移。

初试API

进入命令行

py manage.py shell

按照文档进行测试,这里就不赘述

  • 我在进行上述步骤时,没有进行migrate,在测试时出现了报错,exit() 从shell模式中退出

Django 3.0 文档笔记——数据库与模型 tutorial 02_第4张图片

我们可以给model增加 __str__ 方法来显示文字,注意 __str__ 是给定函数

同时增加was_published_recently自定义方法

改完后代码:

from django.db import models
import datetime
from django.utils import timezone

# Create your models here.

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    def __str__(self):
        return self.question_text
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    def __str__(self):
        return self.choice_text

时间越晚,数值越大,所以当前时间减去一天等于昨天时间,比昨天晚,返回true

介绍 Django 管理页面

创建账号

py manage.py createsuperuser

按照提示输入用户名,邮箱,密码等

进入管理站点页面

py manage.py runserver

http://127.0.0.1:8000/admin/ 进行登录

Django 3.0 文档笔记——数据库与模型 tutorial 02_第5张图片

可编辑的内容为组和用户,并没有我们写的question和choice,需要我们进行添加。打开 polls/admin.py

from django.contrib import admin
from .models import Question, Choice

# Register your models here.

admin.site.register(Question)
admin.site.register(Choice)

进行刷新可进行编辑,完美体现了外键的连接,记得保存

Django 3.0 文档笔记——数据库与模型 tutorial 02_第6张图片

 

几个小问题

数据库表格可视化

文档里并没有说明可视化,对于很多人,这一串代码估计也是头秃

对于sqlite的可视化,我安装了免费的sqlite expert

Django 3.0 文档笔记——数据库与模型 tutorial 02_第7张图片

打开数据库文件,可以进行查看和更改

Django 3.0 文档笔记——数据库与模型 tutorial 02_第8张图片

Django 3.0 文档笔记——数据库与模型 tutorial 02_第9张图片

pk / id

在测试数据库中用到了 pk 项,pk(primary key)为主键,独立于表格项,也就是任何model中都有的主键,那么id呢,大部分时候也是model的主键,所以在这个时候我们可以认为pk和id是完全一样的

时区

可在settings中进行更改

TIME_ZONE = 'Asia/Shanghai'

设置成为上海时间(北京时间)

 

你可能感兴趣的:(Django,Django)