七、Django进阶:第三方库Django-extensions的开发使用技巧详解(附源码)
Django-extensions是 Django 的扩展应用,给django开发者提供了许多便捷的扩展工具(extensions),它提供了许多有用的工具和命令行工具,帮助 Django 开发者更高效地进行开发和调试。它的作用包括:
- 提供了更多的Django命令,比如导出数据库、生成数据模型文档、查看URL路由表等;
- 提供了一些有用的Django插件,比如shell_plus插件可以在Shell中自动导入项目的所有模块;
- 提供了一些有用的Django工具,比如graph_models可以将项目的数据模型转换成UML图。
本篇文章介绍它包含哪些有用扩展以及它们的使用场景,django-extensions主要提供了三种扩展:命令扩展,字段扩展和模型扩展。
官方文档:https://django-extensions.readthedocs.io/en/latest/index.html
GitHub:https://github.com/django-extensions/django-extensions

django-extensions安装配置
使用pip安装:pip install django-extensions
加入settings.py中的INSTALLED_APPS

python manage.py help
[auth]
[contenttypes]
[django]
[sessions]
[staticfiles]
此时会多出来一项django_extensions
[django_extensions]
包含以下子命令:
admin_generator、clean_pyc、clear_cache、compile_pyc、create_command、create_jobs、create_template_tags、delete_squashed_migrations、describe_form、drop_test_database、dumpscript、export_emails、find_template、generate_password、generate_secret_key、graph_models、list_model_info、list_signals、mail_debug、managestate、merge_model_instances、notes、pipchecker、print_settings、print_user_for_session、raise_test_exception、reset_db、reset_schema、runjob、runjobs、runprofileserver、runscript、runserver_plus、set_default_site、set_fake_emails、set_fake_passwords、shell_plus、show_template_tags、show_urls、sqlcreate、sqldiff、sqldsn、sync_s3、syncdata、unreferenced_files、update_permissions、validate_templates
在项目中准备以下环境信息
- 创建超级用户
 - 创建APP:startapp extension_app
 
命令扩展
- shell_plus
 
shell命令的扩展命令,运行Django shell的同时自动加载所有app的models,并选择使用Python shell的版本。
每次进行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生成自定义命令所需要的目录结构。
python manage.py create_command extension_app

- create_template_tags
 
为一个app生成template tag所需要的目录结构。
- compile_pyc
 
为项目编译python字节码。
- describe_form
 
生产一个model的form代码,可以将它拷贝到的文件。
- delete_squashed_migrations
 
删除残留的squash migration文件。
- dmpscript
 
生产一个python 脚本,用来重新填充数据库。
- graph_models
 
将项目的数据模型转换成UML图,创建基于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来重置数据库。
目前支持 sqlite3, mysql, postgres,可以用来删除或创建数据库
- 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-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自动生成,独一无二。

输入才有输出,吸收才能吐纳。——码字不易
相关文章:
七、Django进阶:第三方库Django-extensions的开发使用技巧详解(附源码)
Django-extensions是 Django 的扩展应用,给django开发者提供了许多便捷的扩展工具(extensions),它提供了许多有用的工具和命令行工具,帮助 Django 开发者更高效地进行开发和调试。它的作用包括: - 提供了更多的Django命令&#x…...
浏览器特色状态
强缓存:不会向服务器发送请求,直接从缓存中读取资源,在chrome控制台的Network选项中可以看到该请求返回200的状态码,并且Size显示from disk cache或from memory cache。 强缓存可以通过设置两种HTTP Header实现:Expir…...
context 浅析
在缺少直接调用关系的两个函数之间传递数据,一般都会考虑使用 context,而 context 也被用来存储整个请求链路的公参信息,用户 uid、链路 traceID、特定的业务参数等。函数第一个参数类型设置为 context.Context 也是 Go 的默认写法࿰…...
Bandizip已管理员身份运行
系列文章目录 文章目录 系列文章目录前言一、Bandzib是什么?二、使用步骤1.引入库 前言 在解压krita源码包时Bandizip报错 一、Bandzib是什么? bandzip官网 Bandizip 是一款压缩软件,它支持Zip、7-Zip 和 RAR 以及其它压缩格式。它拥有非…...
LiveCharts2 初步认识
文章目录 1 LiveCharts2 是什么?2 LiveCharts2 可以做什么?3 简单使用LiveCharts2 ,实现动态曲线图 1 LiveCharts2 是什么? GitHub:https://github.com/beto-rodriguez/LiveCharts2 官网: https://lvchar…...
Java设计模式 11-代理模式
代理模式 一、 代理模式(Proxy) 1、代理模式的基本介绍 代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是: 可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象…...
Python综合案例-小费数据集的数据分析(详细思路+源码解析)
目录 1. 请导入相应模块并获取数据。导入待处理数据tips.xls,并显示前5行。 2、分析数据 3.增加一列“人均消费” 4查询抽烟男性中人均消费大于5的数据 5.分析小费金额和消费总额的关系,小费金额与消费总额是否存在正相关关系。画图观察。 6分析男女顾…...
软件安全测试
软件安全性测试包括程序、网络、数据库安全性测试。根据系统安全指标不同测试策略也不同。 1.用户程序安全的测试要考虑问题包括: ① 明确区分系统中不同用户权限; ② 系统中会不会出现用户冲突; ③ 系统会不会因用户的权限的改变造成混乱; ④ 用户登陆密码是否…...
Scala模式匹配
Scala中有一个非常强大的模式匹配机制,应用也非常广泛, 例如: 判断固定值 类型查询 快速获取数据 简单模式匹配 一个模式匹配包含了一系列备选项,每个备选项都开始于关键字 case。且每个备选项都包含了一个模式及一到多个表达式。箭头符号 > 隔开…...
银行数仓分层架构
一、为什么要对数仓分层 实现好分层架构,有以下好处: 1清晰数据结构: 每一个数据分层都有对应的作用域,在使用数据的时候能更方便的定位和理解。 2数据血缘追踪: 提供给业务人员或下游系统的数据服务时都是目标数据&…...
Go并发编程的学习代码示例:生产者消费者模型
文章目录 前言代码仓库核心概念main.go(有详细注释)结果总结参考资料作者的话 前言 Go并发编程学习的简单代码示例:生产者消费者模型。 代码仓库 yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (g…...
求a的n次幂
文章目录 求a的n次幂程序设计程序分析求a的n次幂 【问题描述】要求利用书上介绍的从左至右二进制幂算法求a的n次幂; 【输入形式】输入两个正整数,一个是a,一个是n,中间用空格分开 【输出形式】输出一个整数 【样例输入】2 10 【样例输出】1024 【样例输入】3 4 【样例输出】…...
word脚标【格式:第X页(共X页)】
不得不吐槽一下这个论文,真的我好头疼啊。我又菜又不想改。但是还是得爬起来改 (是谁大半夜不能睡觉加班加点改格式啊) 如何插入页码。 格式、要求如下: 操作步骤: ①双击页脚,填好格式,宋体小四和居中都…...
Linux --- 软件安装、项目部署
一、软件安装 1.1、软件安装方式 在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下: 1.2、安装JDK 上述我们介绍了Linux系统软件安装的四种形式,接下来我们就通过第一种(二进制发布包)形式来安装 JDK。 JDK…...
MATLAB应用笔记
其他 1、NaN值 MATLAB判断数据是否为NaN可以直接使用函数:isnan() 三、数据分析 1、相关性 均值、方差、协方差、标准差、相关系数 mean() %均值 nanmean()%去除NAN值求均值 var() %方差 cov() %协方差 std() %标准差 corrcoef(B,b) %R 相关系数plot()…...
ERTEC200P-2 PROFINET设备完全开发手册(6-2)
6.2 诊断与报警实验 首先确认固件为 App1_STANDARD, 将宏定义改为: #define EXAMPL_DEV_CONFIG_VERSION 1 参照第6节的内容,编译和调试固件,并在TIA Portal 中建立RT项目。启动固件后,TIA Portal 切换到在线,可以看…...
算法套路八——二叉树深度优先遍历(前、中、后序遍历)
算法套路八——二叉树深度优先遍历(前、中、后序遍历) 算法示例:LeetCode98:验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只…...
视频批量剪辑:如何给视频添加上下黑边并压缩视频容量。
视频太多了,要如何进行给视频添加上下黑边并压缩视频容量?今天就由小编来教教大家要如何进行操作,感兴趣的小伙伴们可以来看看。 首先,我们要进入视频剪辑高手主页面,并在上方板块栏里选择“批量剪辑视频”板块&#…...
那些你需要知道的互联网广告投放知识
作为一个合格的跨境电商卖家,我们除了有好的产品之外,还要知道怎么去营销我们自己的产品。没有好的推广,即使你的产品有多好别人也是很难看得到的。今天龙哥就打算出一期基础的互联网广告投放科普,希望可以帮到各位增加多一点相关…...
【hello Linux】进程程序替换
目录 1. 程序替换的原因 2. 程序替换原理 3. 替换函数 4. 函数解释 5. 命名理解 6.简陋版shell的制作 补充: Linux🌷 1. 程序替换的原因 进程自创建后只能执行该进程对应的程序代码,那么我们若想让该进程执行另一个“全新的程序”这 便要用…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
