【Python】【进阶篇】18、Django初始化项目环境精讲

news2024/11/22 7:13:35

目录

  • 18、Django初始化项目环境精讲
    • 1. 完成数据库迁移
    • 2. PyMySQL模块的使用
    • 3. migrate与makemigrations命令详解
        • 1) makegrations生成数据库迁移文件
        • 2) migrate执行数据库迁移命令
        • 3) 完成数据库迁移总结

18、Django初始化项目环境精讲

上一节中,我们完成了对 settings.py 文件的基本配置,本节我们还需要对新建的项目进一步的操作,从而完成项目的初始化工作。

在《settings.py配置文件详解》一文中,我们介绍了 INSTALLED_APPS 这个安装了 Django 自带应用的列表,诸如 admin 后台管理系统、auth 用户系统应用以及session 会话建立等应用,它们都被安装在了这个列表中。

1. 完成数据库迁移

作为应用(下面我们统称 app)通常都会需要使用数据表来完成状态或数据的保存,Django 自带的 app 也不例外。如果不同步这些应用的数据表到数据库中,而是直接启动项目,在 CMD 命令行就会打印警告信息,并且告知如何解决这个警告信息方法。如图 1 所示:

在这里插入图片描述

图1:Django 警告信息以及解决方法

在图1中,用红色方框标注的的就是 Django 的警告信息,告诉我们安装在 INSTALLED_APPS 列表中应用如 admin、auth、session 等需要进行数据库迁移。而且它还告诉我们如何进行迁移,就是使用如下命令来进行数据表的迁移:

python manage.py migrate

提示:“迁移”就是把 Django 默认自带应用的数据表迁移到我们自己的创建的数据库里,有点像搬家的意思,migrate 这个单词的含义就是“迁移”。

如果你是在 Linux 或者 Mac 操做系统,利用终端启动项目后,提示会更加明显,如下图 2 所示:

在这里插入图片描述

图2:Linux 终端运行项目

因为 Linux 系统同时安装了 python 2.7 版本和 python 3.x 的版本,所以使用如下命令进行数据库的迁移。

python3 manage.py migrate

migrate 是 manage.py 的子命令,它主要用来将应用的数据表同步到数据库中。执行后,它会检查 INSTALLED_APPS 里配置的应用列表,依次为每个应用创建所需要的数据表。

我们可以根据自己的需要来决定使用哪个应用,如果项目本身用不到,可以将其在列表注释掉。那么migrate就不会执行它了。在执行此命令之前,你的数据库应该处于开启状态而且你的 settings.py 文件已经按照《如何配置settings.py文件》一节做了相应的配置。执行命令后,在 CMD 命令行得到如图3所示输出:

在这里插入图片描述

图3:完成数据库迁移

2. PyMySQL模块的使用

如果你的终端看到如图 4 所示的报错信息,也不必紧张,这个错误信息是由于 MySQLdb 不支持 Python 3 导致的,所以 Django 连接MySQL就不能在使用 MySQLdb 了,我们需要用一个驱动模块来实现 MySQL 数据库 与 Django 的连接 ,这时候就用到了一个 Python 的模块,也就是 PyMySQL 模块。

在这里插入图片描述

图4:数据库连接报错

PyMySQL 模块是 Python 的一个第三方模块, Python 3 与 MySQL 数据库的连接就是由它实现的。然后我们进行以下操作:找到
init.py 配置文件,在文件中加上如下代码:

import pymysql 
pymysql.install_as_MySQLdb()

这就表示用 PyMySql 代替 MySQLdb 来实现 Django 与 MySQL
数据库的交互。按照上述的方式配置完成后,再执行迁移命令,就可以顺利完成项目的初始化工作了。

3. migrate与makemigrations命令详解

通过图 3 所示,我们能够得出执行完 migrate 命令后,在数据库 bookstoredb 中就生成了 admin、auth、session
等应用所需要的数据表,我们可以进入 MySQL 命令界面,使用如下命令查看创建了哪些表。

SHOW TABLES;

输出结果如下所示,这就是在项目数据库中生成的表:

mysql> show tables;
+----------------------------+
| Tables_in_bookstoredb      |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
10 rows in set (0.01 sec)

这里使用一个命令就完成了数据库的迁移工作,但是有两点问题值得我们思考,migrate
是怎么知道要创建哪些表的,而且如果这些表修改了,它又怎样去维护这些表与数据库中已经迁移的表保持一致呢?下面我们来解答这个疑惑。

Django 对于数据库的迁移工作通过两个命令来实现,一个就是我们上面介绍的 migrate 命令,另个命令如下所示:

python manage.py makemigrations

makemigrations 命令会检测应用目录下是否存在 migrations 目录,如果没有则进行创建。首先,会根据应用的表结构定义生成一个
0001_inital.py 文件,里面定义了数据表的结构。

1) makegrations生成数据库迁移文件

当数据表更改后,我们首先执行 makemigrations 命令,然后 Django
会重新生成一个新的数据库迁移文件用来记录表结构之间的差异,命名规则是对上一个迁移文件的序列号加1,如 0002_xxx、0003_xxx。

2) migrate执行数据库迁移命令

之后,再次执行 migrate 命令让新的迁移文件生效并同步回数据库,从而完成表结构定义的修改。对于 Django
内置的应用,数据库迁移文件已经生成好了,所以直接使用 migrate 命令即可。

3) 完成数据库迁移总结

每一次数据表更改后,都需要执行下面的两个命令,它们的执行顺序如下所示:

python manage.py makemigrations  
python manag.py migrate

为了保证已经完成的迁移工作不会重复的执行,Django 会把每一次数据库迁移记录到 django_migrations 表中,每一次执行 migrate
命令前都会比较迁移文件是否已经记录在表中了,只有没出现过的才会执行。若想查看当前项目的第一次 migrate 生成的迁移记录,可以在 MySQL
命令行界面使用如下命令查看 :

select * from django_migrations;

输出结果如下所示:

mysql> select * from django_migrations;
+----+--------------+------------------------------------------+----------------------------+
| id | app          | name                                     | applied                    |
+----+--------------+------------------------------------------+----------------------------+
|  1 | contenttypes | 0001_initial                             | 2020-03-31 17:53:24.328380 |
|  2 | auth         | 0001_initial                             | 2020-03-31 17:53:24.772333 |
|  3 | admin        | 0001_initial                             | 2020-03-31 17:53:25.304430 |
|  4 | admin        | 0002_logentry_remove_auto_add            | 2020-03-31 17:53:25.389557 |
|  5 | admin        | 0003_logentry_add_action_flag_choices    | 2020-03-31 17:53:25.400529 |
|  6 | contenttypes | 0002_remove_content_type_name            | 2020-03-31 17:53:25.483671 |
|  7 | auth         | 0002_alter_permission_name_max_length    | 2020-03-31 17:53:25.499663 |
|  8 | auth         | 0003_alter_user_email_max_length         | 2020-03-31 17:53:25.523571 |
|  9 | auth         | 0004_alter_user_username_opts            | 2020-03-31 17:53:25.540536 |
| 10 | auth         | 0005_alter_user_last_login_null          | 2020-03-31 17:53:25.584193 |
| 11 | auth         | 0006_require_contenttypes_0002           | 2020-03-31 17:53:25.589585 |
| 12 | auth         | 0007_alter_validators_add_error_messages | 2020-03-31 17:53:25.599557 |
| 13 | auth         | 0008_alter_user_username_max_length      | 2020-03-31 17:53:25.617511 |
| 14 | auth         | 0009_alter_user_last_name_max_length     | 2020-03-31 17:53:25.635472 |
| 15 | auth         | 0010_alter_group_name_max_length         | 2020-03-31 17:53:25.653411 |
| 16 | auth         | 0011_update_proxy_permissions            | 2020-03-31 17:53:25.664380 |
| 17 | sessions     | 0001_initial                             | 2020-03-31 17:53:25.688552 |
+----+--------------+------------------------------------------+----------------------------+
17 rows in set (0.00 sec)

至此,BookStore 项目的骨架、数据库配置和迁移都已经完成了,后面需要做的就是完成应用的创建和编写,能够提供一些功能给用户使用。本节详细讲解了项目初始化过程中会遇到的一些问题,并对他们做了深度的剖析,包括 Django 与 MySQL 数据库的连接以及数据库迁命令的解析,希望这些知识对大家学习 Django 有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/479824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件工程导论 - 了解黑盒测试

前言 本篇介绍用例的基本要素,熟悉黑盒测试的7种设计测试用例的方法,了解等价类,边界值,判定表,正交表,场景设计,错误猜测法;如有错误,请在评论区指正,让我们…

使用docker部署prometheus最新版本2.43.0

环境准备: 192.168.197.136 安装prometheus 192.168.197.137 安装grafana 先把需要用到的镜像拉取下来 docker pull prom/prometheus 136服务器拉取 当前最新版本2.43.0 在部署prometheus之前先运行一个容器,把需要挂载的目录文件拷贝出来 docker…

[230501] 4月29日考试真题第一篇|Temporary Pools

题目来源:http://t.csdn.cn/goCDT 正确率:6/10 目录​​​​​​​ Temporary Pools 题目 Temporary Pools Paragraph 1: Temporary pools are freshwater habitats that retain water for only three to four months of the year or even shorter pe…

如何在CentOS上详细安装PageOffice进行企业文档管理和协作

PageOffice是一款针对企业文档管理和协作的办公软件,使用它可以轻松创建和编辑办公文档,并协作共享给其他用户。在CentOS上安装PageOffice可以提高企业的工作效率和文档管理水平。本文将详细介绍在CentOS上安装PageOffice的步骤和注意事项。 一、安装Ja…

【Unity-UGUI控件全面解析】| RawImage 显示纹理组件详解

🎬【Unity-UGUI控件全面解析】| RawImage 显示纹理组件详解一、组件介绍二、组件属性面板三、代码操作组件四、组件常用方法示例4.1 相机映射,可充当小地图4.2 播放视频💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN�…

LDAP概念和原理介绍

LDAP概念和原理介绍 相信对于许多的朋友来说,可能听说过LDAP,但是实际中对LDAP的了解和具体的原理可能还比较模糊,今天就从“什么是LDAP”、“LDAP的主要产品”、“LDAP的基本模型”、“LDAP的使用案例”四个方面来做一个介绍。 我们在开始…

c#笔记-变量

变量 在编写程序时,我们不能直接预测运行时所有的可能性。 例如在登录时的用户名和密码,有无数种组合。我们无法写出所有可能的值。 变量可以动态地表示一个值。 定义变量 使用var 标识符,并立刻赋值,可以声明一个变量。 var…

倾斜摄影三维模型OSGB格式转换OBJ格式的主要技术方法

倾斜摄影三维模型OSGB格式转换OBJ格式的主要技术方法 将倾斜摄影所获得的三维模型从OSGB格式转换为OBJ格式,可以实现更加灵活和便捷的数据应用和管理。主要技术方法如下: 1、使用转换工具 目前市面上有许多三维模型格式转换工具,比如K3DMak…

辨析 项目范围核查、WBS核查

项目范围核查、WBS核查辨析 项目范围核查 项目目标是否完善和准确指标是否可靠和有效约束和限制条件是否真实和符合实际重要假设前提是否合理风险是否可以接受成功把握是否很大范围定义是否能够保证上述目标的实现范围能够给出的效益是否高于成本范围定义是否需要进一步进行辅…

Python+vue企业员工高校学生体检服务预约系统PyCharm+django

开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发软件:PyCharm 功能介绍 通过软件的需求分析已经获得了系统的基本功能需求,根据需求&#xff0c…

五子棋游戏程序创作过程(C语言)

五子棋游戏程序创作过程(C语言 ) 我是编程爱好者,对游戏程序编制很感兴趣。学习VB6语言时就编制过一些游戏程序,如独立钻石棋、伤脑筋十二块、连连看、扑克牌游戏等,都是windows标准图形界面的。感到很好玩&#xff0…

vue3+ts+vite自适应项目——路由、layout布局

系列文章目录 第一章:搭建项目 目录 系列文章目录 前言 一、vue-router 1.安装vue-router 2.引入 2.1 新建页面 2.2 公共样式引入 2.3 layout 布局 2.4路由配置 总结 前言 上一章我们搭建了项目,这一张主要讲路由和layout布局,和…

go环境安装

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时…

ArduPilot之GPS Glitch问题M8N模块配置

ArduPilot之GPS Glitch问题&M8N模块配置 1. 源由2. 现象3. 视频分析3.1 配置(不理想)3.2 配置优化3.3 优化配置短时间3D LockGlitch3.4 优化配置长时间3D DGPS Lock3.5 使用尽量多的卫星系统3.5.1 配置一3.5.2 配置二 4. 总结4.1 解锁卫星数4.2 自动…

项目风险管理

风险的分类(按照性质划分) 纯粹风险:只有损失可能性而无获利可能性的风险。投机风险:相对于纯粹风险而言,指既有损失的可能又有获利机会的风险。风险既是一个危险也是一个机会 一、规划风险管理 决定如何进行规划和实施项目风险管理活动 二、风险识别 判断哪些风险会…

单列文本数据快速导入表格

文本数据导入Excel似乎是个老生常谈,方法也有很多,例如 使用文本编辑器打开文本文件,拷贝粘贴到Excel然后分类Power Query中的【从文本/CSV】如下图所示。 但是这个需求略有不同,文本数据为单列,每7行数据为一组&am…

2023年华东杯数学建模B 题 期货价格相关性问题-思路解析

题目背景: 许多金融标的都有其内在的关联,如何从量价数据找到这种关联是一个有趣的 问题。例如在万得的“煤焦钢矿”板块中,有螺纹钢、铁矿石、不锈钢、热轧卷板、 硅铁、焦煤、焦炭、锰硅、线材 9 个品种。这些品种有些是上下游关系&…

【高频电子线路】——高频小信号放大器学习笔记总结

CSDN话题挑战赛第2期 参赛话题:学习笔记 学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐&a…

SmartEngine流程引擎之Custom模式

目录 一、为什么选用SmartEngine 二、各类流程引擎框架简单对比 1、流程设计器推荐 2、什么是BPMN 流程定义解释说明 三、SmartEngine之Custom实操 1、引入依赖 2、典型的初始化代码如下 3、节点如何流转以及流程实例存储问题 4、定义Delegation 关键类 一、为什么选用…

RebbitMQ Windows安装

RabbitMQ是由Erlang语言写的,因此安装前要先安装Erlang Erlang及RabbitMQ安装版本的选择 下载时一定要注意版本兼容性 版本兼容说明地址:RabbitMQ Erlang Version Requirements — RabbitMQ 我们选择的版本 Erlang官网下载:https://www.erlang.org/downloads Ra…