geekdoc-python-zh/docs/askpython/django-extensions.md

260 lines
7.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Django 扩展–安装和实现扩展
> 原文:<https://www.askpython.com/django/django-extensions>
在本文中,我们将看到 Django 扩展功能扩展了 Django 中默认提供的功能。
## **各种重要的 Django 扩展**
提供的各种重要扩展如下:
* **管理扩展**
* **命令扩展**
* **调试器标签**
* **字段扩展**
* **模型扩展**
* **验证器**
* **Powershell**
下表给出了详细的分析
### 1.管理扩展
一些重要的扩展包括:
| 延长 | 描述 |
| --- | --- |
| ***foreign keyautocompleteadmin*** | 允许管理应用程序显示带有搜索输入字段的外键字段。 |
| ***foreinkeyautocompletestackedinline***
和***foreinkeyautocompletetabularinline*** | 类似于 AutocompleteAd这两个类为 **AdminInline 类**中的外键字段启用搜索输入字段 |
Admin Extensions
### 2.命令扩展
一些最常用的命令扩展是:
| 延长 | 描述 |
| --- | --- |
| **Shell_plus** | Django shell 的增强版;已经自动加载了所有的模型,因此我们可以马上使用 ORM。 |
| **创建 _ 模板 _ 标签** | 在指定的应用程序中生成模板标记目录结构 |
| **生成 _ 密码** | 它会生成一个可用作用户密码的新密码。 |
| **导出 _ 电子邮件** | 以下列格式之一导出电子邮件地址Google、Outlook、LinkedIn 和 VCard |
| **图形 _ 模型** | 它为应用程序创建了一个 GraphViz 点文件。它将应用程序的模型(通过)合并成一个单一的模型。输出通常指向一个点文件。 |
| **运行 _ 脚本** | 在姜戈运行一个脚本 |
| **sql_create** | 按照 settings.py 中的指定,生成创建数据库的 SQL。 |
Command Extensions
在后面的章节中,我们将会看到更多关于 shell**shell _ plus**的内容。
### 3.调试器标记
有了[调试器](https://www.askpython.com/django/django-debugging)标签,我们可以轻松调试 [Django 模板](https://www.askpython.com/django/django-templates)。这些模板标签提供了三个过滤器——**IPDB、PDB 或 WDB**
语法是:
```py
{% load debugger_tags %}
{% for object in objects %}
{{object | ipdb/pdb/wdb }}
{% endfor %}
```
| 过滤器 | 描述 |
| --- | --- |
| IPDB | 它是一个 Ipython 调试器工具,与 Ipython 一起使用来调试模型对象(与它一起使用) |
| 物理数据库 | 调试模型对象是普通的 Python 调试器 |
| WDB | 它是一个 Web 调试器工具,用于通过浏览器本身调试基于 python 的应用程序。 |
Debugger Tags
**注意:**要使用过滤器,我们需要在模板文件的顶部加载调试器标签
```py
{% load debugger_tags %}
```
### 4.字段扩展
一些有用的字段扩展包括:
| | |
| --- | --- |
| **随机场** | 创建具有指定长度的唯一随机字符 |
| **日期时间字段** | 当对象首次保存到数据库时DateTimeField 自动设置其日期 |
| **JSONField** | 这个文本字段整齐地序列化/反序列化 JSON 对象 |
Field Extensions
### 5.模型扩展
这些是重要的模型扩展:
| 延长 | 描述 |
| --- | --- |
| **ActivatorModel** | 这个抽象基类提供了一个**状态、激活日期**和**去激活日期** |
| **TitleDescriptionModel** | 这个抽象基类模型提供了 **title** 字段,它是一个最大长度为 **255** 的**不可空** CharField以及一个**可空描述**字段。 |
Modle Extensions
### 6.验证器
Django 扩展提供的一些重要的验证器是:
| 延长 | 描述 |
| --- | --- |
| **无控制字符验证计算机** | 该属性确保了像**新行**或**制表符**这样的控制字符是**而不是**所允许的。 |
| **NoWhitespaceValidator** | 这个属性确保了开头和结尾的空格是允许的**而不是**。 |
| **HexValidator** | 确保该字符串是有效的十六进制字符串。也可以选择指定长度、最小长度和最大长度参数 |
Validators
## **安装 Django 扩展**
我们可以使用 [pip](https://www.askpython.com/python-modules/python-pip) 命令本身安装扩展。运行代码
```py
pip install django-extensions
```
我们还需要在 settings.py 中提到 Django 扩展。所以只需在 INSTALLED_APPS 目录中添加以下内容。
```py
INSTALLED_APPS = [
#......
#......
#......
'django_extensions'
]
```
就这样Django 扩展已经可以使用了。
## **实现 Django 扩展**
现在我们将看到如何在 Django 项目中使用重要的扩展
### 1.实施管理扩展
考虑我们在[上一篇文章](https://www.askpython.com/django/django-blog-app)中构建的 BlogModel在 models.py 文件中有以下字段
```py
from django.db import models
class BlogModel(models.Model):
id = models.IntegerField(primary_key=True)
blog_title = models.CharField(max_length=20)
blog = models.TextField()
def __str__(self):
return f"Blog: {self.blog_title}"
```
此外,考虑一个 **CommentModel** ,它包含来自 BlogModel 表的特定**博客**的评论。在 models.py 文件中的BlogModel 下添加注释模型:
```py
class CommentModel(models.Model):
your_name = models.CharField(max_length=20)
comment_text = models.TextField()
blog = models.ForeignKey('BlogModel', on_delete=models.CASCADE)
def __str__(self):
return f"Comment by Name: {self.your_name}"
```
注意, **blog** 字段是连接 BlogModel 的 FK。现在**admin.py** 文件中,我们将对评论模型模板应用管理扩展。
```py
from .models import *
from django_extensions.admin import ForeignKeyAutocompleteAdmin
@admin.register(CommentModel)
class BookModelAdmin(ForeignKeyAutocompleteAdmin):
related_search_fields = {
'blog':('blog_title',)
}
#Fields
fields =('your_name','comment_text','blog')
```
有关管理模板的更多信息,请查看[管理模板](https://www.askpython.com/django/django-admin-template)一文
现在运行服务器并转到[管理站点](https://www.askpython.com/django/django-admin-site)
![Admin Extensions](img/20908cd5a3cccf2cb46c99de3f47a0c1.png)
Admin Extensions
查看搜索选项如何出现在 **FK 博客字段**中。
### 2.用 Ipython 实现 shell_plus
要用 Ipython 运行 shell_plus我们首先需要安装它。
**Ipython** 是一个为 python 打造的交互式 shell。它使得 shell 环境高效且易于使用。它提供了我们可以使用的有用的环境工具和命令。
要安装 IPython请运行以下命令:
```py
pip install ipython
```
现在使用下面的命令运行 shell_plus 和 ipython
```py
python manage.py shell_plus --ipython
```
![Shell Plus With Ipython](img/09b6587d1242064bf2a0071a592d4d8c.png)
Shell Plus With Ipython
看,项目中的所有模型都自动加载到 shell 中。
## 其他一些重要的扩展
我们现在将在这里看到一些最常用的扩展
### 1.RandomCharField 扩展
您可以使用下面的命令在您的模型中添加该字段:
```py
from django.db import models
from django_extensions.db.fields import RandomCharField
class ModelName(models.Model):
Field1 = RandomCharField(length=12, unique =True, include_punctuation=True)
```
### 2.验证器
**models.py** 中这个扩展的语法是:
```py
from django_extensions.validators import HexValidator
class ModelName(models.Model):
Field1 = models.CharField(max_length=80, validators=[HexValidator(length=64)])
```
## **结论**
就这样,伙计们!!这都是关于 Django 扩展的。我希望您已经获得了关于这些扩展的良好知识。请务必查看其他 Django 扩展的官方文档。
我们已经结束了 Django 系列教程。一定要看看我们关于 Django 的其他[文章](https://www.askpython.com/django)。继续编码!!