您现在的位置是:首页 > 正文

提升效率!Django 中鲜为人知的内置命令

2024-02-01 00:04:48阅读 2

【导语】:在我们使用Django框架开发应用或者网站的过程中,通常会用到许多命令进行管理,例如常用的runserver, makemigrations, migrate, shell等。此外,许多第三方包也提供了一些命令,我们可以在项目中使用这些命令,来简化开发流程。今天我们一起来学习一些有用的新命令。如果你还不熟悉Django,这里有一篇简单易上手的教程

1. diffsettings

# 使用方式:
$ python manage.py diffsettings --default path.to.module --output unified

在开发过程中,有时需要同时处理多个环境,并对不同之处进行调试。在这种特殊的场景下,就需要用到diffsettings命令。该命令可以显示出当前配置文件与其他配置文件的差异。具体参数解释如下:

  • --all用来显示所有的配置

  • --default MODULE 中的MODULE表示要与当前配置进行比较的配置模块,如果省略了MODULE参数,则表示与Django的默认配置进行比较

  • --output {hash, unified}用来指定输出格式,hash是默认模式;unified显示的输出规则为:减号后面的是默认配置,加号后面的是改变后的配置

如下就是一个示例:

- DEBUG = False
+ DEBUG = True
- EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
+ EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
- TIME_ZONE = 'America/Chicago'
+ TIME_ZONE = 'UTC'
+ USE_SRI = True
- USE_TZ = False
+ USE_TZ = True
...

2. sendtestemail

# 使用方式:
$ python manage.py sendtestemail my@address.com

通过使用sendtestemail命令发送如下代码:

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

出现这些代码,说明成功了
-----------------------------------------------------------

就可以检测和修改我们的邮箱配置。

3. inspectdb

# 使用方式:
$ python manage.py inspectdb

如果我们想基于现有的数据库(由其他系统管理)构建项目,可以使用inspectdb命令查看该数据库的结构,并根据数据库表反向生成Model。这样,开发者就无需再写复杂的SQL语句去使用数据了!示例如下:

# 这是一个自动生成的`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'),)
...

4. showmigrations

# 使用方式:
$ python manage.py showmigrations --verbosity 2

通过使用showmigrations命令,可以看到当前项目所有的app及对应的已经生效的migration文件,[x]表示migrate通过, [ ]表示未通过。对于已通过的migration文件,还可以看到它的具体migrate时间。

admin
 [X] 0001_initial (applied at 2021-01-13 19:49:24)
 [X] 0002_logentry_remove_auto_add (applied at 2021-01-13 19:49:24)
 [X] 0003_logentry_add_action_flag_choices (applied at 2021-01-13 19:49:24)
auth
 [X] 0001_initial (applied at 2021-01-13 19:49:24)
 [X] 0002_alter_permission_name_max_length (applied at 2021-01-13 19:49:24)
 [X] 0003_alter_user_email_max_length (applied at 2021-01-13 19:49:24)
...

还有许多其他有用的Django项目管理命令,这些命令初始的Django包里没有,可以通过外部包来使用,例如django-extensions[1]

参考资料

[1]

django-extensions: https://pypi.org/project/django-extensions/

[2]

参考原文: https://blog.ovalerio.net/archives/2420

- EOF -

outside_default.png

加主页君微信,不仅Python技能+1

outside_default.png42a57895ea03dab77541c99a47ceec16.png

主页君日常还会在个人微信分享Python相关工具资源精选技术文章,不定期分享一些有意思的活动岗位内推以及如何用技术做业余项目

676e507055dce085bba16ef62b70f48e.png

加个微信,打开一扇窗

推荐阅读  点击标题可跳转

1、django -2 http 协议处理流程

2、Django 源码解析 - 1

3、最简单的 Django 教程

觉得本文对你有帮助?请分享给更多人

推荐关注「Python开发者」,提升Python技能

点赞和在看就是最大的支持❤️

网站文章

  • 过河(动态规划)

    有一条河,河中有n块石头,现在从河的一边只能通过走石头到达对岸,每一步可以跨越至多3个石头。但是不幸的是,有一块石头被上一个过河的人踩松后被踩松了,所以为了安全后来的人就不能再踩这一块石头了。若现在有一个人想要到河的对岸去,他有多少种方法?注:若我们将石头从1到n进行编号的话,那么被踩松的石头编号为k。输入格式:多组输入对于每组输入在一行中给出2个整数n和...

    2024-02-01 00:04:43
  • 小波变换原理

    小波变换原理

    https://www.cnblogs.com/warmbeast/p/7809286.html 从傅里叶变换到小波变换,并不是一个完全抽象的东西,可以讲得很形象。小波变换有着明确的物理意义,如果我们...

    2024-02-01 00:04:35
  • C++:容器的基本功能与分类

    C++:容器的基本功能与分类

    容器的基本功能与分类容器类是容纳、包含一组元素或元素集合的对象。基于容器中元素的组织方式:顺序容器、关联容器按照与容器所关联的迭代器类型划分:可逆容器和随机访问容器容器的基本功能与分类容器unorde...

    2024-02-01 00:04:27
  • 前端安全知识

    前端安全知识

    原文连接 https://jkchao.cn/article/59d... XSS xss: 跨站脚本攻击(Cross Site Scripting)是最常见和基本的攻击 WEB 网站方法,攻击者通过注入非法的 html 标签或者 javascript 代码,从而当用户浏览该网页时,控制用户浏览器。 xss 主要分为三类: DOM x...

    2024-02-01 00:03:57
  • 虚拟服务器 双机,HA双机软件如何使用虚拟(VIP:Virtual IP)

    HA高可用,一般是对外提供一个固定IP地址或者固定域名供用户访问。固定域名方式需要域名解析为对应的ip地址,是一种分布式系统,这个和虚拟ip没关系。固定ip地址访问的方式,这个访问的ip又怎么知道服务...

    2024-02-01 00:03:50
  • visual studio客户端windows模式下调出cmd命令行

    visual studio客户端windows模式下调出cmd命令行

    visual studio 设置技巧

    2024-02-01 00:03:12
  • 关于rpm 命令的--changelog参数

    关于rpm 命令的--changelog参数

    2024-02-01 00:03:06
  • java面试题 --- 异常类型及处理

    java面试题 --- 异常类型及处理

    1.Java异常类型 2.异常的处理 异常处理指的是对可提前检查的异常的处理。 1&gt;使用try...catch语句块来处理 2&gt;使用throws/throw抛出到上层 3.finally关键字 finally 关键字用来创建在 try 代码块后面执行的代码块。无论是否发生异常,finally 代码块中的代码总会被执行。 在 finally 代码块中,可以运行清理类型...

    2024-02-01 00:02:48
  • 第六讲 单片机的指令系统及汇编语言程序设计基础

    第六讲 单片机的指令系统及汇编语言程序设计基础 §3-1 MCS-51单片机的指令格式与寻址方式一、汇编语言程序设计的意义什么是程序?完成某项特定任务的指令的集合。计算机按程序一条一条地依次执行指令,从而完成指定任务。要让计算机完成各项任务,就应设计各种程序。程序设计语言:机器语言、汇编语言、高

    2024-02-01 00:02:20
  • Android使用Opengl录像时添加(动态)水印

    Android使用Opengl录像时添加(动态)水印

    最近需要开发一个类似行车记录仪的app,其中需要给录制的视频添加动态水印。我使用的是OpenGL开发的,刚开始实现的是静态水印,后面才实现的动态水印。1、静态水印实现原理:录像时是通过OpenGL把图像渲染到GLSurfaceView上的,通俗的讲,就是把图片画到一块画布,然后展示出来。添加图片水印,就是把水印图片跟录制的图像一起画到画布上。这是加载纹理跟阴影的Java类package c...

    2024-02-01 00:02:13