查看原文
其他

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

南风草木香 Python开发者 2022-07-28

【导语】:在我们使用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 -


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

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

加个微信,打开一扇窗



推荐阅读  点击标题可跳转

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

2、Django 源码解析 - 1

3、最简单的 Django 教程


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

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

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

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存