七、Django进阶:第三方库Django-extensions的开发使用技巧详解(附源码)

news2024/11/25 14:45:19

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、RandomCharFieldShortUUIDField

  • 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、 TimeStampedModelTitleSlugDescriptionModel。使用时将模型继承这几个基类即可。

  • 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自动生成,独一无二。

输入才有输出,吸收才能吐纳。——码字不易

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/424252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

循环依赖详解及解决方案

介绍 上图就是循环依赖的三种情况,虽然方式不同,但是循环依赖的本质是一样的,就A的完整创建要依赖与B,B的完整创建要依赖于A,相互依赖导致没办法完整创建造成失败. 循环依赖代码演示 public class Demo {public static void main(String[] args) {new Demo1();} }class Demo1…

电子信息工程有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是电子信息工程领域的一些SCI期刊推荐: IEEE Transactions on Information Theory: 该期刊由IEEE出版,专注于信息理论领域的研究,包括编码理论、信道编码、信息传输、信息论应用等方面的研究。 IEEE Transactions on Signal…

Apache网页与安全优化

系列文章目录 文章目录系列文章目录一、1.构建虚拟web主机2.一、基于域名的虚拟主机二、Apache 日志分割1.三、Apache的网页优化总结一、 1.构建虚拟web主机 虚拟Web主机指的是在同一台服务器中运行多个Web站点,其中每一个站点实际上并不独立占用整个服务器&#…

天选姬 - 桌面宠物

天选姬 - 桌面宠物前言下载使用更新设置右键菜单人机交互系统状态闹钟壁纸前言 桌面宠物顾名思义指在电脑桌面的宠物,可以是各种动物或Q版人物。可以进行交互并拥有各种各样的功能,本文介绍一款适用于各种电脑的桌面宠物,天选姬,…

【Redis-面试题及持久化方案】Redis相关面试题(缓存穿透、缓存击穿、缓存血崩) Redis两种持久化方案详情对比(RDB、AOF)

【Redis-面试题及持久化方案】Redis相关面试题(缓存穿透、缓存击穿、缓存血崩) & Redis两种持久化方案详情对比(RDB、AOF)1)Redis 面试题1.1.高频面试题:缓存穿透、缓存击穿、缓存血崩1.2.低频面试题&a…

电脑0X000000D1蓝屏错误U盘重新安装系统教学

电脑0X000000D1蓝屏错误U盘重新安装系统教学。最近有用户遇到了电脑桌面变成了0X000000D1错误代码的蓝屏界面了,无法继续操作使用。那么这个问题怎么去进行系统U盘重装呢?来看看以下的详细解决方法吧。 准备工作: 1、U盘一个(尽量…

智慧城市我国发展现状怎样?

智慧城市从概念提出到落地实践,历经十多年的建设与发展,我国智慧城市建设数量持续增长。我国智慧城市整体建设和发展情况总结如下。 北京智汇云舟科技有限公司成立于2012年,专注于创新性的“视频孪生(实时实景数字孪生)”技术研发与应用。目前…

江南爱窗帘十大品牌,怎么合理的搭配窗帘配色

窗帘行业圈:窗帘行业内部交流圈,窗帘从业者的交流内部圈。 当阳光照进房间的那一刻, 光线给空间带来了无限的可能。 窗边的帘帐既是美丽的风景 又是可爱的魔术师。 在光影变幻的时空里 让你的生活布满温馨和奇幻。 1.窗帘材质怎么选 窗帘的材…

DataSecurity Plus如何阻止数据泄露

随着互联网的发展,数据泄露事件时有发生,给个人和企业造成了巨大的损失。为了保护数据安全,企业需要采取一系列的安全措施,而其中一项重要的措施就是使用数据安全工具。DataSecurity Plus 是一款功能强大的数据安全工具&#xff0…

苹果AirPods耳机推送新固件更新,TWS耳机与Find My可实现智能防丢

苹果推送 iOS / iPadOS 16.5 Beta 2 更新的同时,原本还为 AirPods 耳机推送了固件更新 5E133。苹果在临时撤回之后,再次向用户推送了本次更新, 苹果官方表示当你的 AirPods 在充电且在 iPhone、iPad 或 Mac 的蓝牙通信范围内时,…

【LeetCode:(每日一题1023. 驼峰式匹配) -> 剑指 Offer II 097. 子序列的数目 | 暴力递归=>记忆化搜索=>动态规划】

🍎作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎 🍎座右…

iOS 吸顶效果

项目中,在列表向上滚动时,有时需要将某个控件置顶,这就是我们常见的吸顶效果。 1. UITableView 吸顶效果 UITableView是自带吸顶效果,我们把需要置顶的控件设置为SectionHeaderView,这样在滚动时,该控件会…

360城市全景,开启全新城市探索方式

引言 360城市全景技术的出现和发展,让我们的生活方式和观念发生了革命性的变化。在过去,我们只能通过实地旅行、图片和视频来了解不同城市的文化、建筑和风景。现在,通过360城市全景技术,我们可以像亲临现场一样,透过…

Vue实现自动化平台(四)--接口管理页面的实现

上一章: Vue实现自动化平台(三)_做测试的喵酱的博客-CSDN博客 github地址:https://github.com/18713341733/vuemiaotest 这个目前只是用来练手的,项目还没成型。等以后我写完了,再更新一下项目链接。 …

软件测试——概念篇

目录 一、软件的生命周期 二、瀑布模型(Waterfall Model) 优点: 缺点: 三、螺旋模型(Spiral Model) ​编辑优点: 缺点: 四、增量、迭代 区别: 五、敏捷 scrum…

windows下如何搭建属于自己的git服务器

前一阵子公司需要,领导让我给我们技术部搭建一个git服务器。以前看过教程,但自己没动手做过,开始按照网上的教程来,但搭建过程中发现还是不够详细,今天给大家一个比较详细的,希望对大家有帮助。 高能预警&…

DB2安装指导文档

操作系统windowsXP 版本:9.1.7 一:db2安装 用户为当前操作系统得用户 域为空 二:添加许可证,因为当前系统得试用期已到,所以必须输入有效的序列号,在安装数据库的过程中有时候也会莫名的死掉&#xff0c…

【LeetCode: 剑指 Offer II 099. 最小路径之和 | 暴力递归 | DFS =>记忆化搜索=>动态规划】

🍎作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎 🍎座右…

4.java程序员必知必会类库之xml解析库

前言 百度百科解释 可扩展标记语言 (Extensible Markup Language, XML) ,标准通用标记语言的子集,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 可扩展性良好,内容与形式分离,遵…

(2023)基于多模态概率融合提示的少样本多模态情感分析

论文题目(Title):Few-shot Multimodal Sentiment Analysis based on Multimodal Probabilistic Fusion Prompts 研究问题(Question):用概率融合提示进行少样本的情感分析任务 研究动机(Motiva…