个人学习笔记,参考 django 官方文档:https://docs.djangoproject.com/zh-hans/3.2/
一、自定义后台
Django 提供了相应的接口供我们自定义 Django 自带的后台管理应用。
比如,这是 Django 后台增加 Question 的一个表单,我们现在需要把Question text
和 Date
的顺序换一下。该怎么做呢?
polls
这是我们自己写的应用,我们是在admin.py
里注册到后台的,对应的后台配置也在这里。
polls/admin.py
# 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
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
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
的官方文档。