Django进阶:内置manage.py shell开发常用命令用法详解

2023-07-2518:52:37后端程序开发Comments843 views字数 6087阅读模式

Djangodjango-admin.pymanage.py都是Django的命令工具集,用于处理系统管理相关操作,这两个文件代码和包含命令基本是一样的,而manage.py(用来管理创建好了的项目)是在创建Django工程时自动生成的,manage.py是对django-admin.py(一般只用来创建项目和APP)的简单包装,二者的作用基本一致。 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

Django进阶:内置manage.py shell开发常用命令用法详解                     文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

django-admin.py和manage.py的区别

django-admin.pyDjango的命令行工具,它是一个全局的命令,可以在任何地方使用。它提供了许多管理Django项目的命令,例如创建项目、创建应用程序、运行开发服务器等。使用django-admin.py,我们可以执行各种管理任务,而不需要进入特定的Django项目目录。 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

与之相反,manage.py是每个Django项目中的一个特定的命令行工具。它是根据项目的名称自动生成的,并位于项目的根目录中,而django-admin存放在PythonLib\site-packages\django\bin以及Scripts里。manage.py提供了与django-admin.py相同的功能,但它的作用范围仅限于当前项目。也就是说,我们必须在项目目录中使用manage.py来执行与项目相关的管理任务。 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

使用django-admin.pymanage.py的区别在于它们的作用范围和使用方式。当我们需要在全局范围内执行Django管理任务时,我们可以使用django-admin.py。例如,我们可以使用以下命令创建一个新的Django项目: 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

django-admin.py startproject myproject 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

然而,当我们需要在特定的Django项目中执行管理任务时,我们应该使用manage.py。例如,我们可以使用以下命令运行开发服务器: 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py runserver 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

此外,manage.py还提供了一些特定于项目的命令,例如数据库迁移、创建超级用户等。这些命令只能通过manage.py来执行。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

Django进阶:内置manage.py shell开发常用命令用法详解 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

下面将介绍下常用的一些子命令 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

常用子命令 

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

django-admin <subcommand> [options]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py <subcommand> [options]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

subcommand是子命令;options是可选的 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

  • startproject:创建一个项目(*
  • startapp:创建一个app*
  • runserver:运行开发服务器(*
  • shell:进入django shell,项目环境终端(*
  • dbshell:进入django dbshell,数据库交互
  • check:检查django项目有没有问题,完整性检查
  • flush:清空数据库内容,只留下空表
  • compilemessages:编译语言文件
  • makemessages:创建语言文件
  • makemigrations:生成数据库同步脚本(*
  • migrate:同步数据库(*
  • showmigrations:显示所有数据库迁移文件,即生成的数据库同步脚本(*
  • sqlflush:查看生成清空数据库的脚本(*
  • sqlmigrate:查看数据库同步的sql语句(*
  • dumpdata:导出数据
  • loaddata:导入数据
  • diffsettings:查看当前的配置文件和django默认配置(其他配置文件)的不同之处
  • manage.py特有的一些子命令:
  • createsuperuser:创建超级管理员(*
  • changepassword:修改密码(*
  • clearsessions:清除session
  • test: 开始测试
  • collectstatic:搜集静态文件,如果设置了STATIC_ROOTcollectstatic命令的时候,会将各app下所有名为static的文件夹及其子目录复制收集到STATIC_ROOT。把静态文件集中一起的目的是为了更方便地通过ApacheNginx部署。
  • inspectdb [table]:根据已有数据库反向生成django模型。可以选择数据表名字
  • makemessages:搜集所有的messages,可以生成指定文件格式如xml文件,供后期翻译
  • sendemail [email]:发送测试邮件
  • sendtestemail:可以检测和修改邮箱配置
  • createcachetable:创建缓存表

1help文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:获得帮助信息文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

#显示帮助信息和可用命令

python manege.py help

#显示可用命令列表

python manege.py help --commands

#显示指定命令的详细文档

python manage.py help  #commands为需要指定显示的命令

2version文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:获取到当前DJango的版本文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py version

3check文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:检查工程中是否存在错误(检查完整性)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py check [appname]   #命令后面跟APP名称

4startproject文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:创建Django工程文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

django-admin startproject project_name [项目想要存放的路径]

5startapp文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:创建Django APP应用程序,需要先cd进入创建的项目文件夹文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

django-admin startapp name [应用想要存放的路径]

python manage.py startapp app_name

6runserver文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:在当前机器启动一个Web服务器,运行Django项目文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

#默认是8000端口

python manage.py runserver

#指定IP和端口

python manage.py runserver 127.0.0.1:8000

#指定端口

python manage.py runserver 8000

7shell文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:启动一个交互窗口,排除故障。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py shell
#如果想使用ipythonbpython交互模式的话需要先安装以上交互工具,安装命令:pip install ipython
#启用命令
python manage.py shell --i [ipyhton]

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.pyshell启动一个python解释器,可以用它来测试存储在项目数据库中的数据。导入模型、获取模型的所有实例。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

注意:每次修改模型后,要重启shell。这样才能看到修改的效果。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

8migrations文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

将真正提交到数据库执行。Django通过migrations命令将Models中的任何修改写入到数库中,比如:新增加的模型或修改已有的字段等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

9makemigrations文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:检测模型变化,根据models的变化生成对应的Python代码,生成新的数据库迁移文件,该代码用于更新数据库,保存在migrations目录下。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

app名字可选。如果一个项目包含多个app,而只更改了其中一个app的模型,建议后面加入具体的app文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py makemigrations
python manage.py makemigrations [appname]
python manage.py showmigrations --verbosity 2

10migrate文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:同步数据库与模型,将model里的修改应用到数据库文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py migrate #默认是所有的APP的修改应用到数据库

python manage.py migrate [appname] #指定APP的修改应用到数据库

python manage.py migrate [appname] [migrations_name] #将操作恢复到指定版本
在迁移数据时 添加应用名称 和 app名称
python manage.py migrate app_name --database=data_center
python manage.py migrate --database=data_center

注意:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

如果执行migrate的命令同时给了应用程序的名字和migtrations名字,系统会把数据库恢复到之前指定的一个版本。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py migrate myblog 0001_initial #指定blog应用恢复到0001_initial 这个版本

Django所有的migration信息都保存在django_migrations这个数据库表中,如下图所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

Django进阶:内置manage.py shell开发常用命令用法详解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

如果想撤销所有的数据库更改,可以使用zero代替上面的命令:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py migrate blog zero

高级用法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

如果数据库里,已经手动更新了数据库,只是想设置当前的migration状态,就使用下面的命令去实现,这个命令并不会真正的去更新数据库。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py migrate blog zero

重置app,文件前的 [x] 变成了[ ]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

migrate --fake app_name zero文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

migrate --fake calendars zero # --fake  calendars的顺序不能反文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

删除 app下的migrations模块中 除 init.py 之外的所有文件。 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

执行makemigrations calendars文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

初始迁移 migrate --fake-initial文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

会在数据库中的 migrations表中记录当前这个app 执行到 0001_initial.py ,但是它不会真的执行该文件中的代码。这样就做到了,既不对现有的数据库改动,而又可以重置 migraion 文件,再也不用在 migration模块中看到一推文件了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

到此表就可以出来了文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

class Meta:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

db_table = "fta_solutions_app_solution"文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

managed = True  # 此处的值需要为True文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

https://simpleisbetterthancomplex.com/tutorial/2016/07/26/how-to-reset-migrations.html文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

11sqlmigrate文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:输出某一个migrate对应的SQL语句文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py sqlmigrate blog 0001_initial

12showmigrations文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:显示migrations记录文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py showmigrations

记录前有[X]的表示已经部署到数据库里去了,没有的则显示 [ ]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

迁移及其状态初始为0文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

12changepassword文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:修改指定用户的密码文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py changepassword username

Django进阶:内置manage.py shell开发常用命令用法详解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

13inspectdb文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:如果想基于现有的数据库(由其他系统管理)构建项目,可以使用inspectdb命令查看该数据库的结构,并根据数据库表反向生成Model。这样,开发者就无需再写复杂的SQL语句去使用数据了 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py inspectdb
# 这是一个自动生成的`Django`model模块# 必须手动执行以下操作:#   * 重新排列model的顺序#   * 确保每个model都有一个`primary_key=True`字段,这样就可以指定自定义主键了#   * 确保给每个`ForeignKey`和`OneToOneField`都设置了`on_delete`,`ForeignKey`是关系字段,表示外键关联关系;`OneToOneField`是一对一字段,用来扩展已有字段。#   * 如果想在Django中创建、修改、删除数据表,需要移除`managed = False`这一行# 可以重命名model,但不能重命名db_table值和字段名... class AuthPermission(models.Model):    content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING)    codename = models.CharField(max_length=100)    name = models.CharField(max_length=255)     class Meta:        managed = False        db_table = 'auth_permission'        unique_together = (('content_type', 'codename'),)...

14sendtestemail文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:可以检测和修改邮箱配置。 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py sendtestemail my@address.com 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

通过使用sendtestemail命令发送如下代码:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

Content-Type: text/plain; charset="utf-8"MIME-Version: 1.0Content-Transfer-Encoding: 7bitSubject: Test email from host on 2022-04-28 19:08:56.968492+00:00From: webmaster@localhostTo: my@address.comDate: Thu, 28 Apr 2022 19:08:56 -0000Message-ID: <165117293696.405310.3477251481753991809@host>

发送不报错即可。 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

15diffsettings文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

作用:可以显示出当前配置文件与其他配置文件的差异。 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

python manage.py diffsettings --default path.to.module --output unified 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

在开发过程中,有时需要同时处理多个环境,并对不同之处进行调试。在这种特殊的场景下,就需要用到diffsettings命令。具体参数解释如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

--all用来显示所有的配置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

--default MODULE 中的MODULE表示要与当前配置进行比较的配置模块,如果省略了MODULE参数,则表示与Django的默认配置进行比较文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

--output {hash, unified}用来指定输出格式,hash是默认模式;unified显示的输出规则为:减号后面的是默认配置,加号后面的是改变后的配置 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

总结
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

django-admin.py和manage.py是Django中的两个命令行工具,用于管理和执行各种任务。django-admin.py是一个全局的命令,可以在任何地方使用,而manage.py是特定于项目的命令,只能在项目目录中使用。了解它们的区别和用法将有助于我们更好地管理和开发Django项目。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/51950.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/51950.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定