django-extensions给django开发者提供了许多便捷的扩展工具(extensions),在github上高达5000颗星。小编我今天就介绍它包含哪些奥利给的有用扩展以及它们的使用场景。
django-extensions的安装
使用pip安装:
$ pip install django-extensions
然后把其加入settings.py的INSTALLED_APPS:
INSTALLED_APPS = [
...
'django_extensions',
]
django-extensions提供了哪几种扩展?
django-extensions主要提供了三种扩展:命令扩展,字段扩展和模型扩展。我们接下来分别介绍。
命令扩展
shell_plus
每次进行Django项目调试时,你首先需要打开python shell,再重新import每个model。如果安装了django-extensions, 使用python manage.py shell_plus命令将打开一个加强版的django shell,这个shell_plus为你自动载入项目中所有的model,可以让你很方便的开始调试。
show_urls
一句话可以展示当前项目所有定义的urls。
clear_cache
一句话清除缓存,在测试和开发环境很有用。
export_emails
一句话导出所有用户的email地址。
pipchecker
检查pip requirements.txt文件中是否有过期的packages,类似于pip list -o,只用于已安装过的packages。
其它有用的命令扩展还包括:
-
admin_generator: 只要你提供app label,就会自动为你输出定义的Admin Class代码,默认输出在stdout
-
clean_pyc: 移除项目中所有的pyc文件
-
create_command: 为一个app生成自定义命令所需要的目录结构。
-
create_template_tags: 为一个app生成template tag所需要的目录结构。
-
compile_pyc: 为项目编译python字节码
-
describe_form: 生产一个model的form代码,你可以将它拷贝到你的文件
-
delete_squashed_migrations: 删除残留的squash migration文件
-
dumpscript:生产一个python 脚本,用来重新填充数据库
-
export_emails: 为你的用户生成email地址
-
graph_model: 创建基于model的GraphViz2文件.
-
mail_debug: 开启一个邮件服务器,它会打印邮件内容而不是把它发送出去
-
merge_model_instances: 合并重复的model instance
-
notes: 展示代码中所有的 TODO, FIXME, BUG, HACK, WARNING, NOTE, XXX 的地方
-
passwd: 轻松修改用户密码
-
print_settings: 展示所有的,或者指定的django settings
-
print_user_for_session: 通过session来找到user,并且打印
-
drop_test_database: 删除测试数据库
-
reset_db: 使用DROP DATABASE和CREATE DATABASE来重置数据库
-
runprofileserver: 开启一个激活了profile功能的开发服务器
-
runscript: 在django上下文中运行一个脚本
-
runserver_plus: 标准的runserver加上Werkzeug的debugger工具
-
set_fake_emails: 根据用户的数据,为所有用户设置一个虚构的email
-
show_template_tags: 展示当前项目可用的template tags和template filters
-
sqldiff: 展示model和数据库是否结构不一样,如果有不一样的地方就展示出来
-
sqlcreate: 根据你的settings.py定义,为你生成创建数据库的SQL代码
-
sqldsn: 根据settings.py定义的数据库配置,返回一个可以用于其它程序的数据库URI
-
sync_s3: 将MEDIA_ROOT的文件复制到S3
-
update_permissions: 重载权限
-
validate_templates: 确认template是否有语法错误
字段扩展
django-extensions提供的最有用的字段扩展莫过于AutoSlugField, RandomCharField和ShortUUIDField。
AutoSlugField
很多时候我们需要在url里根据模型某个或多个字段(比如标题,用户名)生成一个独一无二的slug,便于搜索引擎发现我们的内容。AutoSlugField可以很轻松帮我们完成这个任务,而且永不重复。比如两篇文章有同样的标题,它会在第2篇文章的slug结尾上加上一个数字。下次如果你用django开发自己的博客,试试这个字段吧,保证你满意。
使用这个字段时先从django-extensions导入,然后指定根据哪些字段生成slug即可。它的强大之处在于它还支持自定义的模型方法和双下划线__关联模型查询。
slug = AutoSlugField(populate_from=['title', 'get_description', 'author__username'])
RandomCharField
验证用户身份时我们经常需要生成一个随机字符串发给用户,有时还需生成随机的邀请码。RandomCharField可以轻松实现这个目的。你还可以指定字符串长度和格式。
>>> RandomCharField(length=8, unique=True)
BVm9GEaE
>>> RandomCharField(length=4, include_alpha=False)
7097
>>> RandomCharField(length=12, include_punctuation=True)
k[ZS.TR,0LHO
>>> RandomCharField(length=12, lowercase=True, include_digits=False)
pzolbemetmok
ShortUUIDField
一个由22个字符组成的字符串,比正常的uuid短了很多。尽管不保证唯一,但重复概率极低。
模型扩展
django-extensions提供的最有用的模型基类扩展莫过于ActivatorModel, TitleDescriptionModel, TimeStampedModel 和TitleSlugDescriptionModel。使用时把你的模型继承这几个基类即可。
ActivatorModel
作为基类提供了 status
, activate_date
,和 deactivate_date
这3个字段。status是一个choice选项,默认是activated。每次当你激活或失活一条记录时,日期会自动更新。它还提供了一个自定义Manager方法,允许使用Model.objects.active()查询所有处于活跃状态的对象。
TitleDescriptionModel
作为基类提供了title
和 description
两个字段。title最长255个字符。
TimeStampedModel
作为基类提供了created
和 modified
两个字段。这两个字段都是自我管理,自动更新的。
TitleSlugDescriptionModel
作为基类提供了title
, description
和 slug
三个字段,其中slug根据title自动生成,独一无二。
所有以上扩展你最喜欢哪个呢? 欢迎留言。
大江狗原创
2020.12.15
相关阅读