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 模块。文章图片
通常,这个配置文件使用 SQLite 作为默认数据库。如果开发者不熟悉数据库,或者只是想尝试下 Django,这是最简单的选择。Python 内置 SQLite,所以无需安装额外东西来使用它。
5.1.1 安装MySQL数据库API驱动程序
pip install mysqlclient
文章图片
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 设置时区(看文末 )
文章图片
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自动创建的表“们”
5.5 创建模型 数据库结构设计和附加的其它元数据。
在这个投票应用中,需要创建两个模型:问题
Question
和选项 Choice
。Question
模型包括问题描述和发布时间。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
应用安装到项目里。文章图片
运行命令
python manage.py makemigrations polls
文章图片
通过运行
makemigrations
命令,Django 会检测对模型文件的修改,并且把修改的部分储存为一次迁移。迁移是 Django 对于模型定义(也就是你的数据库结构)的变化的储存形式 - 它们其实也只是一些磁盘上的文件。
文章图片
Django 有一个自动执行数据库迁移并同步管理你的数据库结构的命令 —— migrate
首先,让我们看看迁移命令会执行哪些 SQL 语句。
sqlmigrate
命令接收一个迁移的名称,然后返回对应的 SQLpy manage.py sqlmigrate polls 0001
文章图片
【注意】
- 输出的内容和开发者使用的数据库有关,上面的输出示例笔者使用的是 MySQL。
- 数据库的表名是由应用名(
polls
)和模型名的小写形式(question
和choice
)连接而来。(可自定义) - 主键(IDs)会被自动创建。(可自定义)
- 默认的,Django 会在外键字段名后追加字符串
"_id"
。(可自定义) - 外键关系由
FOREIGN KEY
生成。 - 生成的 SQL 语句是为所用的数据库定制的,所以那些和数据库有关的字段类型,比如
auto_increment
(MySQL)、serial
(PostgreSQL)和integer primary key autoincrement
(SQLite),Django 会自动处理。那些和引号相关的事情 - 例如,是使用单引号还是双引号 - 也一样会被自动处理。 - 这个
sqlmigrate
命令并没有真正在你的数据库中的执行迁移 - 相反,它只是把命令输出到屏幕上,让你看看 Django 认为需要执行哪些 SQL 语句。
py manage.py migrate
文章图片
文章图片
文章图片
这个
migrate
命令选中所有还没有执行过的迁移(Django 通过在数据库中创建一个特殊的表 django_migrations
来跟踪执行过哪些迁移)并应用在数据库上 - 也就是将你对模型的更改同步到数据库结构上。改变模型的三步5.7 初试API 进入交互式Python命令行
- 编辑
models.py
文件,改变模型。- 运行
python manage.py makemigrations
为模型的改变生成迁移文件。- 运行
python manage.py migrate
来应用数据库迁移。
py manage.py shell
文章图片
文章图片
查询时输出对象细节
文章图片
添加自定义方法
文章图片
再次进入命令行
查询所有
文章图片
条件查询
- id为1
文章图片
- 问题文本
文章图片
- 自定义条件
文章图片
文章图片
主键查找
文章图片
显示于问题有关的回答集合
文章图片
现在还没有回答
创建回答
文章图片
再次查询所有相关回答以及个数
文章图片
对回答进行条件查询
文章图片
删除指定回答
文章图片
5.8 介绍Django管理界面 5.8.1 创建一个管理员账号
py manage.py createsuperuser
文章图片
5.8.2 启动服务器
文章图片
访问http://127.0.0.1:8000/admin/
文章图片
5.8.3 进入管理站点页面 使用管理员账号登录
文章图片
5.8.4 向管理页面中加入投票应用
文章图片
文章图片
5.8.5 体验便捷的管理功能 【Django|Django 编写第一个Django应用,第2部分】
文章图片
编辑问题
文章图片
【注意】
- 这个表单是从问题
Question
模型中自动生成的 - 不同的字段类型(日期时间字段
DateTimeField
、字符字段CharField
)会生成对应的 HTML 输入控件。每个类型的字段都知道它们该如何在管理页面里显示自己。 - 每个日期时间字段
DateTimeField
都有 JavaScript 写的快捷按钮。日期有转到今天(Today)的快捷按钮和一个弹出式日历界面。时间有设为现在(Now)的快捷按钮和一个列出常用时间的方便的弹出式列表。
- 保存(Save) - 保存改变,然后返回对象列表。
- 保存并继续编辑(Save and continue editing) - 保存改变,然后重新载入当前对象的修改界面。
- 保存并新增(Save and add another) - 保存改变,然后添加一个新的空对象并载入修改界面。
- 删除(Delete) - 显示一个确认删除页面。
文章图片
文章图片
5.9 时区设置
文章图片
更改文件后,服务器自动重新运行了
文章图片
现在时间正确了
推荐阅读
- 算法设计与分析|4 评价类算法(变异系数法笔记(附Python代码))
- flask|(零八)Flask有手就行——数据库迁移Flask-Migrate
- vuejs|基于Flask + Vue前后端分离的资产管理系统实现
- python|Python序列以及切片操作
- flask框架快速入门|【flask高级】从源码深入理解flask的应用上下文和请求上下文
- FDTD学习笔记|Lumerical官方案例、FDTD时域有限差分法仿真学习(十五)——y分支的逆向设计(Inverse design of y-branch)
- python|LeetCode 括号生成
- 笔记|解决ModularNotFoundError: No module named “cv2.aruco“
- 笔记|解决pip3 install numpy时ReadTimeoutError