Django 自定义后台

2022-01-17 19:36:20 浏览数 (1)

个人学习笔记,参考 django 官方文档:https://docs.djangoproject.com/zh-hans/3.2/

一、自定义后台

  Django 提供了相应的接口供我们自定义 Django 自带的后台管理应用。

  比如,这是 Django 后台增加 Question 的一个表单,我们现在需要把Question textDate 的顺序换一下。该怎么做呢?

polls这是我们自己写的应用,我们是在admin.py 里注册到后台的,对应的后台配置也在这里。

polls/admin.py

代码语言:javascript复制
# django的接口,默认已经引入。
from django.contrib import admin

# 引入我们自己写的数据表(类)
from .models import *


# 引用默认的API来自定义后台。
class QuestionAdmin(admin.ModelAdmin):
    # 字段
    fields = ['pub_date', 'question_text']


# 注册以下就可以交给django后台管理啦!
# Register your models here.

# 需要改一下配置,把配置的类传进去
admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

  这样就改好了,这是一个很简单的尝试,当然,Django 还提供了其他的 API。

  只有两个字段,我们可以调一下字段的顺序,如果有十个字段呢?

  我们可以为他们分组,像这样。

代码语言:javascript复制
class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields': ['question_text']}),
        ('时间信息', {'fields': ['pub_date']}),
    ]

  于是他就会变成这个样子。

二、添加关联的对象

  一个投票对应了多个选项,但是后台默认没有显示,我们如何在后台关联数据表呢?

  我们在之前就把 Choice 表给注册了,似乎已经关联数据表了,但这样非常的低效,高效的设计是我们在创建一个新的投票问题时就设置好他的选项。

polls/admin.py

代码语言:javascript复制
from django.contrib import admin

from .models import Choice, Question


class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)

  有点小问题。表单占据了大量的屏幕区域来显示所有关联的 Choice 对象的字段。我们可以把继承的类改成TabularInline

代码语言:javascript复制
class ChoiceInline(admin.TabularInline):
    #...

  于是,就变成了这样。

  当然,Django 官方文档还对展示页面等等进行了自定义,这块我没继续学习!

三、Simple UI 快速上手

  根据 Django 的官方文档,你完全可以自定义后台的各各方面!但是,已经有人给我们做好了轮子,我们直接用就可以了。

  这是 simple ui 的官方文档:https://simpleui.72wo.com/docs/simpleui/

  他是一个基于 Django Admin 的现代化主题,配合 Element-UI 和 Vue,让页面更具现代化。

安装

  是用 pip 进行安装,先激活虚拟环境,安装在虚拟环境里。

代码语言:javascript复制
pip install django-simpleui

日志如下

代码语言:javascript复制
(venv) PS J:study_djangovenvScripts> pip install django-simpleui
Collecting django-simpleui
  Downloading django-simpleui-2022.1.tar.gz (2.0 MB)
     |████████████████████████████████| 2.0 MB 252 kB/s
  Preparing metadata (setup.py) ... done
Requirement already satisfied: django in j:study_djangovenvlibsite-packages (from django-simpleui) (3.2.9)
Requirement already satisfied: asgiref<4,>=3.3.2 in j:study_djangovenvlibsite-packages (from django->django-simpleui) (3.4.1)
Requirement already satisfied: pytz in j:study_djangovenvlibsite-packages (from django->django-simpleui) (2021.3)
Requirement already satisfied: sqlparse>=0.2.2 in j:study_djangovenvlibsite-packages (from django->django-simpleui) (0.4.2)
Building wheels for collected packages: django-simpleui
  Building wheel for django-simpleui (setup.py) ... done
  Created wheel for django-simpleui: filename=django_simpleui-2022.1-py3-none-any.whl size=2080238 sha256=731a17b568c71d817ce9ad1eeaa35488d1499f0f15cca278e79f46d763f9446c
  Stored in directory: c:userslenovoappdatalocalpipcachewheels774c93599300b3823726a1922e2a1f929a3733190e3837b51525e38c
Successfully built django-simpleui
Installing collected packages: django-simpleui
Successfully installed django-simpleui-2022.1

挂载项目

  这是一个基于 Django Admin 的应用,我们需要把他挂载到我们的项目中。

重启项目

代码语言:javascript复制
python manage.py runserver

成功

  你可以继续探索下这个后台管理界面,他比自带的后台更加现代化。

  其次我们也可以魔改这个主题,具体请参考Simple UI的官方文档。

0 人点赞