https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial02/
打开 settings.py 这是关于项目的配置文件,通常,这个配置文件使用 SQLite 作为默认数据库
我们可以找到数据库的配置,引擎(ENGINE)为sqlite,文件名称(NAME)为如下,可以在目录中找到该文件
同时settings中的 INSTALLED_APPS 部分包括了会在你项目中启用的所有 Django 应用
通常, 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 表示删除问题时,该选项也联级删除
因为 PollsConfig
类写在文件 polls/apps.py
中,所以它的点式路径是 'polls.apps.PollsConfig'
在settings.py中添加
执行以下命令行
py manage.py makemigrations polls
py manage.py migrate
现在,你只需要记住,改变模型需要这三步:
编辑 models.py 文件,改变模型。
运行 python manage.py makemigrations 为模型的改变生成迁移文件。
运行 python manage.py migrate 来应用数据库迁移。
进入命令行
py manage.py shell
按照文档进行测试,这里就不赘述
我们可以给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
py manage.py createsuperuser
按照提示输入用户名,邮箱,密码等
py manage.py runserver
http://127.0.0.1:8000/admin/ 进行登录
可编辑的内容为组和用户,并没有我们写的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)
进行刷新可进行编辑,完美体现了外键的连接,记得保存
文档里并没有说明可视化,对于很多人,这一串代码估计也是头秃
对于sqlite的可视化,我安装了免费的sqlite expert
打开数据库文件,可以进行查看和更改
在测试数据库中用到了 pk 项,pk(primary key)为主键,独立于表格项,也就是任何model中都有的主键,那么id呢,大部分时候也是model的主键,所以在这个时候我们可以认为pk和id是完全一样的
可在settings中进行更改
TIME_ZONE = 'Asia/Shanghai'
设置成为上海时间(北京时间)