提升效率!Django 中鲜为人知的内置命令
【导语】:在我们使用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]。
参考资料
django-extensions: https://pypi.org/project/django-extensions/
[2]参考原文: https://blog.ovalerio.net/archives/2420
- EOF -
加主页君微信,不仅Python技能+1
主页君日常还会在个人微信分享Python相关工具、资源和精选技术文章,不定期分享一些有意思的活动、岗位内推以及如何用技术做业余项目
加个微信,打开一扇窗
觉得本文对你有帮助?请分享给更多人
推荐关注「Python开发者」,提升Python技能
点赞和在看就是最大的支持❤️