七、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. 程序替换的原因 进程自创建后只能执行该进程对应的程序代码,那么我们若想让该进程执行另一个“全新的程序”这 便要用…...

【网络应用开发】实验4——会话管理
目录 会话管理预习报告 一、实验目的 二、实验原理 三、实验预习内容 1. 什么是会话,一个会话的生产周期从什么时候,到什么时候结束? 2. 服务器是如何识别管理属于某一个特定客户的会话的? 3. 什么是Cookie,它的…...

Linux服务器怎么分区
Linux服务器怎么分区 我是艾西,linux系统除了从业某个行业经常要用到的程序员比较熟悉,对于小白或只会用Windows系统的小伙伴还是会比较难上手的。今天艾西简单的跟大家聊聊linux系统怎么分区,让身为小白的你也能一眼看懂直接上手操作感受程序…...

传统机器学习(四)聚类算法DBSCAN
传统机器学习(四)聚类算法DBSCAN 1.1 算法概述 DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。 该算法将具有足够密度的区域划分为簇,并在…...

“华为杯”研究生数学建模竞赛2020年-【华为杯】A题:ASIC 芯片上的载波恢复 DSP 算法设计与实现(附获奖论文及matlab代码实现)
目录 摘 要: 1.问题重述 1.1 问题背景 1.2 问题提出 1.3 研究基础 2.模型假设和已知...

1043.分隔数组以得到最大和
题目: 给你一个整数数组 arr,请你将该数组分隔为长度 最多 为 k 的一些(连续)子数组。分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值。 返回将数组分隔变换后能够得到的元素最大和。本题所用到的测试…...

微服务治理框架(Istio)的认证服务与访问控制
本博客地址:https://security.blog.csdn.net/article/details/130152887 一、认证服务 1.1、基于JWT的认证 在微服务架构下,每个服务是无状态的,由于服务端需要存储客户端的登录状态,因此传统的session认证方式在微服务中不再适…...

数据结构 | 排序 - 总结
排序的方式 排序的稳定性 什么是排序的稳定性? 不改变相同数据的相对顺序 排序的稳定性有什么意义? 假定一个场景: 一组成绩:100,88,98,98,78,100(按交卷顺序…...

crontab -e 系统定时任务
crontab -e解释 crontab 是由 “cron” 和 “table” 两个单词组成的缩写。其中,“cron” 是一个在 Linux 和类 Unix 操作系统中用于定时执行任务的守护进程,而 “table” 则是指一个表格或者列表,因此 crontab 就是一个用于配置和管理定时任…...

前后端交互系列之Axios详解(包括拦截器)
目录 前言一,服务器的搭建二,Axios的基本使用2.1 Axios的介绍及页面配置2.2 如何安装2.3 Axios的前台代码2.4 Axios的基本使用2.5 axios请求响应结果的结构2.6 带参数的axios请求2.7 axios修改默认配置 三,axios拦截器3.1 什么是拦截器3.2 拦…...

定时任务之时间轮算法
初识时间轮 我们先来考虑一个简单的情况,目前有三个任务A、B、C,分别需要在3点钟,4点钟和9点钟执行,可以把时间想象成一个钟表。 如上图中所示,我只需要把任务放到它需要被执行的时刻,然后等着时针转到这个…...