你应该使用 Django admin 的 9 个理由
admin
2023-07-31 00:38:48
0

本文源自 Reddit 上对我最近的一个帖子的评论:

“问题是,我问到的每个人都持反对意见,他们认为 admin 只限于超级用户,很不灵活并且是难以定制。”
—来自 Reddit 的 andybak

我现在要澄清这个误解。Django 的 admin 绝对是软件中的亮点,可以有效的加速你的开发。

这里有一些我能想到的很有用的 Django 的 admin 模块的窍门。

(对于 Django admin 不太熟悉的人,先简单解释几个名词)

Changeform 是可以编辑对象的页面。

Changelist 页面可以列出指定类型的对象。你可以指定过滤对象的条件及对对象的操作。点击 changelist 里的对象一般会跳转到对象的 changeform 页面。

为了让这些敲门更具可操作性,我们使用了与真实问题几乎一致的场景。假设我们有一个简单的网站,访客可以上传可爱的动物图片并进行评论。这是不是很流行呢?

Tip 1:Django admin 后台不限于用 Django 开发的网站

虽然 Django admin 管理界面可以非常友好的用在 Django 项目的其它部分,它同样可以很容易用于其它像传统的数据库或具有一个可怕的的管理界面的网站。而且这也是评估 Django 是否会满足您的需求的最佳途径。

你需要做的仅是:

  1. 在你的 Django 项目中建立一个新的应用,并确保你已经连接好传统数据库 ,通过 settings.py 文件中的 DATABASES 的设置。
  2. 将你的数据表定义为 Django 的模型。正如它的名字所表述的,manage.py inspectdb 是一个非常有用的命令:检测现有的数据库,并打印出自动生成的 Django 模型。
  3. 创建 admin.py 文件,并放在那里,唉,管理相关的。稍后将详细说明这个。

说到我们的动物“的网站,是由进屎的脑袋写出来的,所以管理界面看起来像……你知道的,不是很好。为了解决这个问题,我们通过几个 Django 模型重构了数据库结构,实现一个简单的管理界面:

 

12345678910111213141516171819202122232425262728293031323334 # models.pyclass Picture(models.Model):    DOG = 1    CAT = 2    ANIMAL_KIND_CHOICES = (        (DOG, \’dog\’),        (CAT, \’cat\’),    )     title = models.CharField(max_length=200)    author = models.ForeignKey(Author, related_name=\’pictures\’)    animal_kind = models.IntegerField(choices=ANIMAL_KIND_CHOICES)    photo = models.ImageField(upload_to=\’animals\’)    is_promoted = models.BooleanField(default=False) class Author(models.Model):    name = models.CharField(max_length=100)    email = models.EmailField() class Comment(models.Model):    author = models.ForeignKey(Author, related_name=\’comments\’)    picture = models.ForeignKey(Picture, related_name=\’comments\’)    comment = models.TextField()    editors_note = models.TextField() # admin.pyclass PictureAdmin(admin.ModelAdmin):    list_display_fields = (\’photo\’, \’animal_kind\’, \’author\’, \’is_promoted\’, ) class AuthorAdmin(admin.ModelAdmin):    list_display_fields = (\’name\’, \’email\’, ) class CommentAdmin(admin.ModelAdmin):    list_display_fields = (\’picture\’, \’author\’, )

Tip #2: 按你喜欢的方式筛选你的数据

很多人使用 Django admin 后台对指定字段进行筛选。要知道,把一个字段名放到 list_filter 列表里就可以了。同时它也非常容易地创建一个自定义过滤器!

假如最终你决定要推广所有有 100+ 的帖子的作者。但是,我们如何区分它们?让我们创建一个过滤器,并把它添加到我们的变更列表。

12345678910111213141516171819202122232425262728 class ProductiveAuthorsFilter(admin.SimpleListFilter):    parameter_name = \’is_productive\’    title = \’Productive author\’    YES, NO = 1, 0     # Number of comments for an author to be considered a productive one    THRESHOLD = 100     def lookups(self, request, model_admin):        return (            (self.YES, \’yes\’),            (self.NO, \’no\’),        )     def queryset(self, request, queryset):        qs = queryset.annotate(Count(\’comments\’))         # Note the syntax. This way we avoid touching the queryset if our        # filter is not used at all.        if self.value() == self.YES:            return qs.filter(comments__count__gte=self.THRESHOLD)        if self.value() == self5812b2ca02360816345246-22\”>        if self.value() == self问题是,我问到的每个人都持反对意见,他们认为 admin 只限于超级用户,很不灵活并且是难以定制。”
—来自 Reddit 的 andybak

我现在要澄清这个误解。Django 的 admin 绝对是软件中的亮点,可以有效的加速你的开发。

这里有一些我能想到的很有用的 Django 的 admin 模块的窍门。

(对于 Django admin 不太熟悉的人,先简单解释几个名词)

Changeform 是可以编辑对象的页面。

Changelist 页面可以列出指定类型的对象。你可以指定过滤对象的条件及对对象的操作。点击 changelist 里的对象一般会跳转到对象的 changeform 页面。

为了让这些敲门更具可操作性,我们使用了与真实问题几乎一致的场景。假设我们有一个简单的网站,访客可以上传可爱的动物图片并进行评论。这是不是很流行呢?

Tip 1:Django admin 后台不限于用 Django 开发的网站

虽然 Django admin 管理界面可以非常友好的用在 Django 项目的其它部分,它同样可以很容易用于其它像传统的数据库或具有一个可怕的的管理界面的网站。而且这也是评估 Django 是否会满足您的需求的最佳途径。

你需要做的仅是:

  1. 在你的 Django 项目中建立一个新的应用,并确保你已经连接好传统数据库 ,通过 settings.py 文件中的 DATABASES 的设置。
  2. 将你的数据表定义为 Django 的模型。正如它的名字所表述的,manage.py inspectdb 是一个非常有用的命令:检测现有的数据库,并打印出自动生成的 Django 模型。
  3. 创建 admin.py 文件,并放在那里,唉,管理相关的。稍后将详细说明这个。

说到我们的动物“的网站,是由进屎的脑袋写出来的,所以管理界面看起来像……你知道的,不是很好。为了解决这个问题,我们通过几个 Django 模型重构了数据库结构,实现一个简单的管理界面:

 

12345678910111213141516171819202122232425262728293031323334 # models.pyclass Picture(models.Model):    DOG = 1    CAT = 2    ANIMAL_KIND_CHOICES = (        (DOG, \’dog\’),        (CAT, \’cat\’),    )     title = models.CharField(max_length=200)    author = models.ForeignKey(Author, related_name=\’pictures\’)    animal_kind = models.IntegerField(choices=ANIMAL_KIND_CHOICES)    photo = models.ImageField(upload_to=\’animals\’)    is_promoted = models.BooleanField(default=False) class Author(models.Model):    name = models.CharField(max_length=100)    email = models.EmailField() class Comment(models.Model):    author = models.ForeignKey(Author, related_name=\’comments\’)    picture = models.ForeignKey(Picture, related_name=\’comments\’)    comment = models.TextField()    editors_note = models.TextField() # admin.pyclass PictureAdmin(admin.ModelAdmin):    list_display_fields = (\’photo\’, \’animal_kind\’, \’author\’, \’is_promoted\’, ) class AuthorAdmin(admin.ModelAdmin):    list_display_fields = (\’name\’, \’email\’, ) class CommentAdmin(admin.ModelAdmin):    list_display_fields = (\’picture\’, \’author\’, )

Tip #2: 按你喜欢的方式筛选你的数据

很多人使用 Django admin 后台对指定字段进行筛选。要知道,把一个字段名放到 list_filter 列表里就可以了。同时它也非常容易地创建一个自定义过滤器!

假如最终你决定要推广所有有 100+ 的帖子的作者。但是,我们如何区分它们?让我们创建一个过滤器,并把它添加到我们的变更列表。

12345678910111213141516171819202122232425262728 class ProductiveAuthorsFilter(admin.SimpleListFilter):    parameter_name = \’is_productive\’    title = \’Productive author\’    YES, NO = 1, 0     # Number of comments for an author to be considered a productive one    THRESHOLD = 100     def lookups(self, request, model_admin):        return (            (self.YES, \’yes\’),            (self.NO, \’no\’),        )     def queryset(self, request, queryset):        qs = queryset.annotate(Count(\’comments\’))         # Note the syntax. This way we avoid touching the queryset if our        # filter is not used at all.        if self.value() == self.YES:            return qs.filter(comments__count__gte=self.THRESHOLD)        if self.value() == selfpan>.NO:            return qs.filter

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...